[PSDK]
[reactos.git] / reactos / include / psdk / winddi.h
index ab5da25..7bdc310 100644 (file)
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
+ *   Annotations by Timo Kreuzer <timo.kreuzer@reactos.org>
  *
  * THIS SOFTWARE IS NOT COPYRIGHTED
  *
 
 #ifndef _WINDDI_
 #define _WINDDI_
+#pragma once
 
 #ifdef __VIDEO_H__
 #error video.h cannot be included with winddi.h
 #else
 
+//#include <winapifamily.h>
 #include <ddrawint.h>
 #include <d3dnthal.h>
+#include <specstrings.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -38,25 +42,76 @@ extern "C" {
 #define DECLSPEC_IMPORT __attribute__((dllimport))
 #endif
 
-#ifndef WIN32KAPI
-#define WIN32KAPI DECLSPEC_ADDRSAFE
+#if defined(_ENGINE_EXPORT_)
+ #define ENGAPI
+#else
+ #define ENGAPI DECLSPEC_IMPORT
 #endif
 
+#ifndef _NO_DDRAWINT_NO_COM
+
+#if !defined(EXTERN_C)
+ #ifdef __cplusplus
+  #define EXTERN_C extern "C"
+  #define __EXTERN_C extern "C"
+ #else
+  #define EXTERN_C extern
+  #define __EXTERN_C
+ #endif
+#endif /* !defined(EXTERN_C) */
+
+#if !defined(DEFINE_GUID)
+ #ifdef INITGUID
+  #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+      __EXTERN_C const GUID name = { l, w1, w2, { b1, b2,  b3,  b4,  b5,  b6,  b7,  b8 } }
+ #else /* !INITGUID */
+  #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+      EXTERN_C const GUID FAR name
+ #endif /* !INITGUID */
+#endif /* !defined(DEFINE_GUID) */
+
+#if !defined(DEFINE_GUIDEX)
+ #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
+#endif /* !defined(DEFINE_GUIDEX) */
+
+#if !defined(STATICGUIDOF)
+ #define STATICGUIDOF(guid) STATIC_##guid
+#endif /* !defined(STATICGUIDOF) */
+
+#if !defined(GUID_DEFINED)
+ #define GUID_DEFINED
+ typedef struct _GUID
+ {
+     ULONG Data1;
+     USHORT Data2;
+     USHORT Data3;
+     UCHAR Data4[8];
+ } GUID;
+#endif /* !defined(GUID_DEFINED) */
+
+#if !defined(IsEqualGUID)
+ #define IsEqualGUID(guid1, guid2) \
+     (!memcmp((guid1), (guid2), sizeof(GUID)))
+#endif /* !defined(IsEqualGUID) */
+
+#ifndef IsEqualIID
+ #define IsEqualIID IsEqualGUID
+#endif /* !defined(IsEqualIID) */
+
+#endif /* !_NO_DDRAWINT_NO_COM */
+
 #define DDI_DRIVER_VERSION_NT4            0x00020000
 #define DDI_DRIVER_VERSION_SP3            0x00020003
 #define DDI_DRIVER_VERSION_NT5            0x00030000
 #define DDI_DRIVER_VERSION_NT5_01         0x00030100
+#define DDI_DRIVER_VERSION_NT5_01_SP1     0x00030101
 
 #define GDI_DRIVER_VERSION                0x4000
 
-#ifdef _X86_
-
+#if defined(_X86_) && !defined(USERMODE_DRIVER) && !defined(BUILD_WOW6432)
 typedef DWORD FLOATL;
-
-#else /* !_X86_ */
-
+#else
 typedef FLOAT FLOATL;
-
 #endif
 
 typedef SHORT FWORD;
@@ -83,6 +138,9 @@ DECLARE_HANDLE(HSURF);
 DECLARE_HANDLE(DHSURF);
 DECLARE_HANDLE(DHPDEV);
 DECLARE_HANDLE(HDRVOBJ);
+DECLARE_HANDLE(HSEMAPHORE);
+
+typedef _Return_type_success_(return >= 0) long NTSTATUS;
 
 #ifndef _NTDDVDEO_
 typedef struct _ENG_EVENT *PEVENT;
@@ -106,6 +164,14 @@ typedef struct _ENG_EVENT *PEVENT;
 #define DN_DEVICE_ORIGIN                  2
 #define DN_SLEEP_MODE                     3
 #define DN_DRAWING_BEGIN                  4
+#if (NTDDI_VERSION >= NTDDI_WIN8)
+#define DN_ASSOCIATE_WINDOW               5
+#define DN_COMPOSITION_CHANGED            6
+#define DN_DRAWING_BEGIN_APIBITMAP        7
+#define DN_SURFOBJ_DESTRUCTION            8
+#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
+
+#define SGI_EXTRASPACE                    0
 
 #define DCR_SOLID                         0
 #define DCR_DRIVER                        1
@@ -122,6 +188,10 @@ typedef struct _ENG_EVENT *PEVENT;
 #define FXTOLCEILING(x) ((x + 0x0F) >> 4)
 #define FXTOLROUND(x)   ((((x) >> 3) + 1) >> 1)
 
+#define SIZEOFDV(cAxes)   (offsetof(DESIGNVECTOR, dvValues) + (cAxes) * sizeof(LONG))
+#define SIZEOFAXIW(cAxes) (offsetof(AXESLISTW, axlAxisInfo) + (cAxes) * sizeof(AXISINFOW))
+#define SIZEOFAXIA(cAxes) (offsetof(AXESLISTA, axlAxisInfo) + (cAxes) * sizeof(AXISINFOA))
+
 typedef struct _POINTE {
        FLOATL  x;
        FLOATL  y;
@@ -182,7 +252,7 @@ typedef struct _CLIPLINE {
   POINTFIX  ptfxB;
   LONG  lStyleState;
   ULONG  c;
-  RUN  arun[1];
+  _Field_size_(c) RUN  arun[1];
 } CLIPLINE, *PCLIPLINE;
 
 /* CLIPOBJ.iDComplexity constants */
@@ -304,6 +374,17 @@ typedef struct _DEVHTADJDATA {
 #define GCAPS2_ICD_MULTIMON     0x00000100
 #define GCAPS2_MOUSETRAILS      0x00000200
 #define GCAPS2_RESERVED1        0x00000400
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define GCAPS2_EXCLUDELAYERED    0x00000800
+#define GCAPS2_INCLUDEAPIBITMAPS 0x00001000
+#define GCAPS2_SHOWHIDDENPOINTER 0x00002000
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define GCAPS2_CLEARTYPE         0x00004000
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+#if (NTDDI_VERSION >= NTDDI_WIN8)
+#define GCAPS2_ACC_DRIVER        0x00008000
+#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
 
 typedef struct _DEVINFO {
   FLONG  flGraphicsCaps;
@@ -322,7 +403,7 @@ struct _DRIVEROBJ;
 
 typedef BOOL
 (APIENTRY CALLBACK *FREEOBJPROC)(
-  IN struct _DRIVEROBJ  *pDriverObj);
+    _In_ struct _DRIVEROBJ  *pDriverObj);
 
 typedef struct _DRIVEROBJ {
   PVOID  pvObj;
@@ -425,7 +506,25 @@ typedef struct _DRIVEROBJ {
 #define INDEX_DrvReserved9                90L
 #define INDEX_DrvReserved10               91L
 #define INDEX_DrvReserved11               92L
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define INDEX_DrvRenderHint               93L
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define INDEX_DrvCreateDeviceBitmapEx     94L
+#define INDEX_DrvDeleteDeviceBitmapEx     95L
+#define INDEX_DrvAssociateSharedSurface   96L
+#define INDEX_DrvSynchronizeRedirectionBitmaps  97L
+#define INDEX_DrvAccumulateD3DDirtyRect   98L
+#define INDEX_DrvStartDxInterop           99L
+#define INDEX_DrvEndDxInterop            100L
+#define INDEX_DrvLockDisplayArea         101L
+#define INDEX_DrvUnlockDisplayArea       102L
+#define INDEX_LAST                       103L
+#else /* (NTDDI_VERSION >= NTDDI_WIN7) */
+#define INDEX_LAST                        94L
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+#else /* (NTDDI_VERSION >= NTDDI_VISTA) */
 #define INDEX_LAST                        93L
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
 typedef struct _DRVFN {
   ULONG  iFunc;
@@ -445,8 +544,11 @@ typedef struct _DRVENABLEDATA {
   DRVFN  *pdrvfn;
 } DRVENABLEDATA, *PDRVENABLEDATA;
 
-DECLARE_HANDLE(HSEMAPHORE);
+/* Font file status values */
+#define FF_SIGNATURE_VERIFIED             0x00000001L
+#define FF_IGNORED_SIGNATURE              0x00000002L
 
+ /* Obsolete in Windows 2000 and later */
 typedef struct {
   DWORD  nSize;
   HDC  hdc;
@@ -460,14 +562,14 @@ typedef struct _ENGSAFESEMAPHORE {
 } ENGSAFESEMAPHORE;
 
 typedef struct _ENG_TIME_FIELDS {
-  USHORT  usYear;
-  USHORT  usMonth;
-  USHORT  usDay;
-  USHORT  usHour;
-  USHORT  usMinute;
-  USHORT  usSecond;
-  USHORT  usMilliseconds;
-  USHORT  usWeekday;
+  _Field_range_(1601,MAXUSHORT) USHORT  usYear;
+  _Field_range_(1,12) USHORT  usMonth;
+  _Field_range_(1,31) USHORT  usDay;
+  _Field_range_(0,23) USHORT  usHour;
+  _Field_range_(0,59) USHORT  usMinute;
+  _Field_range_(0,59) USHORT  usSecond;
+  _Field_range_(0,999) USHORT  usMilliseconds;
+  _Field_range_(0,6) USHORT  usWeekday; // 0 == Sunday
 } ENG_TIME_FIELDS, *PENG_TIME_FIELDS;
 
 typedef struct _ENUMRECTS {
@@ -521,7 +623,7 @@ typedef struct _FD_GLYPHATTR {
   ULONG  cjThis;
   ULONG  cGlyphs;
   ULONG  iMode;
-  BYTE  aGlyphAttr[1];
+  _Field_size_((cGlyphs+7)/8) BYTE  aGlyphAttr[1];
 } FD_GLYPHATTR, *PFD_GLYPHATTR;
 
 /* FD_GLYPHSET.flAccel */
@@ -540,7 +642,7 @@ typedef struct _FD_GLYPHSET {
   FLONG  flAccel;
   ULONG  cGlyphsSupported;
   ULONG  cRuns;
-  WCRUN  awcrun[1];
+  _Field_size_(cRuns) WCRUN  awcrun[1];
 } FD_GLYPHSET, *PFD_GLYPHSET;
 
 typedef struct _FD_KERNINGPAIR {
@@ -549,6 +651,22 @@ typedef struct _FD_KERNINGPAIR {
   FWORD  fwdKern;
 } FD_KERNINGPAIR;
 
+ /* Obsolete in Windows 2000 and later */
+typedef struct _LIGATURE {
+  ULONG culSize;
+  LPWSTR pwsz;
+  ULONG chglyph;
+  HGLYPH ahglyph[1];
+} LIGATURE, *PLIGATURE;
+
+ /* Obsolete in Windows 2000 and later */
+typedef struct _FD_LIGATURE {
+  ULONG culThis;
+  ULONG ulType;
+  ULONG cLigatures;
+  LIGATURE alig[1];
+} FD_LIGATURE;
+
 #if defined(_X86_) && !defined(USERMODE_DRIVER)
 typedef struct _FLOATOBJ
 {
@@ -559,7 +677,8 @@ typedef struct _FLOATOBJ
 typedef FLOAT FLOATOBJ, *PFLOATOBJ;
 #endif
 
-typedef struct _FLOATOBJ_XFORM {
+#ifndef USERMODE_DRIVER
+typedef struct tagFLOATOBJ_XFORM {
   FLOATOBJ  eM11;
   FLOATOBJ  eM12;
   FLOATOBJ  eM21;
@@ -567,6 +686,9 @@ typedef struct _FLOATOBJ_XFORM {
   FLOATOBJ  eDx;
   FLOATOBJ  eDy;
 } FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
+#else
+typedef XFORML FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
+#endif
 
 /* FONTDIFF.fsSelection */
 #define FM_SEL_ITALIC                     0x0001
@@ -630,6 +752,11 @@ typedef struct _FONTINFO {
 #define FO_NOCLEARTYPE    0x02000000
 #define FO_CLEARTYPE_X    0x10000000
 #define FO_CLEARTYPE_Y    0x20000000
+#define FO_CLEARTYPENATURAL_X 0x40000000
+
+#define FD_NEGATIVE_FONT   1L /* Obsolete in Windows 2000 and later */
+#define FO_DEVICE_FONT     1L
+#define FO_OUTLINE_CAPABLE 2L
 
 typedef struct _FONTOBJ {
   ULONG  iUniq;
@@ -818,12 +945,17 @@ typedef struct _PATHDATA {
 #define PO_ELLIPSE                        0x00000002
 #define PO_ALL_INTEGERS                   0x00000004
 #define PO_ENUM_AS_INTEGERS               0x00000008
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define PO_WIDENED                        0x00000010
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
 typedef struct _PATHOBJ {
   FLONG  fl;
   ULONG  cCurves;
 } PATHOBJ;
 
+typedef BYTE GAMMA_TABLES[2][256];
+
 typedef struct _GLYPHBITS {
   POINTL  ptlOrigin;
   SIZEL  sizlBitmap;
@@ -906,7 +1038,7 @@ typedef struct _IFIEXTRA {
 #define FM_INFO_IGNORE_TC_RA_ABLE         0x40000000
 #define FM_INFO_TECH_TYPE1                0x80000000
 
-#define MAXCHARSETS                       16
+#define MAXCHARSETS                       16 /* Obsolete in Windows 2000 and later */
 
 /* IFIMETRICS.ulPanoseCulture constants */
 #define  FM_PANOSE_CULTURE_LATIN          0x0
@@ -1039,7 +1171,6 @@ typedef struct _STROBJ {
 } STROBJ;
 
 
-
 /* SURFOBJ.iType constants */
 #define STYPE_BITMAP                      0L
 #define STYPE_DEVICE                      1L
@@ -1054,7 +1185,21 @@ typedef struct _STROBJ {
 #define BMF_NOTSYSMEM                     0x0020
 #define BMF_WINDOW_BLT                    0x0040
 #define BMF_UMPDMEM                       0x0080
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define BMF_TEMP_ALPHA                    0x0100
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+#if (NTDDI_VERSION >= NTDDI_WIN8)
+#define BMF_ACC_NOTIFY                    0x8000
+#define BMF_RMT_ENTER                     0x4000
+#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN8)
+#define BMF_RESERVED                      0x3E00
+#elif (NTDDI_VERSION >= NTDDI_WIN7)
+#define BMF_RESERVED                      0xFE00
+#else
 #define BMF_RESERVED                      0xFF00
+#endif
 
 typedef struct _SURFOBJ {
   DHSURF  dhsurf;
@@ -1125,44 +1270,48 @@ typedef struct _XLATEOBJ {
 #define WOC_DRAWN                         0x00000040
 #define WOC_SPRITE_OVERLAP                0x00000080
 #define WOC_SPRITE_NO_OVERLAP             0x00000100
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define WOC_RGN_SPRITE                    0x00000200
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
 typedef VOID (APIENTRY CALLBACK *WNDOBJCHANGEPROC)(
-  IN WNDOBJ  *pwo,
-  IN FLONG  fl);
+    _In_ WNDOBJ *pwo,
+    _In_ FLONG fl);
 
 
-WIN32KAPI
+ENGAPI
 HANDLE
 APIENTRY
 BRUSHOBJ_hGetColorTransform(
-  IN BRUSHOBJ  *pbo);
+    _In_ BRUSHOBJ *pbo);
 
-WIN32KAPI
+_Ret_opt_bytecount_(cj)
+ENGAPI
 PVOID
 APIENTRY
 BRUSHOBJ_pvAllocRbrush(
-  IN BRUSHOBJ  *pbo,
-  IN ULONG  cj);
+    _In_ BRUSHOBJ *pbo,
+    _In_ ULONG cj);
 
-WIN32KAPI
+ENGAPI
 PVOID
 APIENTRY
 BRUSHOBJ_pvGetRbrush(
-  IN BRUSHOBJ  *pbo);
+    _In_ BRUSHOBJ *pbo);
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 BRUSHOBJ_ulGetBrushColor(
-  IN BRUSHOBJ  *pbo);
+    _In_ BRUSHOBJ *pbo);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 CLIPOBJ_bEnum(
-  IN CLIPOBJ  *pco,
-  IN ULONG  cj,
-  OUT ULONG  *pv);
+    _In_ CLIPOBJ *pco,
+    _In_ ULONG cj,
+    _Out_bytecap_(cj) ULONG *pul);
 
 /* CLIPOBJ_cEnumStart.iType constants */
 #define CT_RECTANGLES                     0L
@@ -1176,65 +1325,93 @@ CLIPOBJ_bEnum(
 #define CD_LEFTUP                         0x00000003
 #define CD_ANY                            0x00000004
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 CLIPOBJ_cEnumStart(
-  IN CLIPOBJ  *pco,
-  IN BOOL  bAll,
-  IN ULONG  iType,
-  IN ULONG  iDirection,
-  IN ULONG  cLimit);
+    _Inout_ CLIPOBJ *pco,
+    _In_ BOOL bAll,
+    _In_ ULONG iType,
+    _In_ ULONG iDirection,
+    _In_ ULONG cLimit);
 
-WIN32KAPI
+ENGAPI
 PATHOBJ*
 APIENTRY
 CLIPOBJ_ppoGetPath(
-  IN CLIPOBJ  *pco);
+    _In_ CLIPOBJ *pco);
+
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+ENGAPI
+HANDLE
+APIENTRY
+CLIPOBJ_GetRgn(
+    _In_ CLIPOBJ* pco);
+#endif
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngAcquireSemaphore(
-  IN HSEMAPHORE  hsem);
+    _Inout_ HSEMAPHORE hsem);
 
 #define FL_ZERO_MEMORY                    0x00000001
 #define FL_NONPAGED_MEMORY                0x00000002
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+#define FL_NON_SESSION                    0x00000004
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
+
+#ifdef USERMODE_DRIVER
 
-WIN32KAPI
+#define EngAllocMem(fl, cj, tag) ((PVOID)GlobalAlloc(((fl) & FL_ZERO_MEMORY) ? GPTR : GMEM_FIXED, cj))
+#define EngAllocPrivateUserMem(psl, cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
+#define EngAllocUserMem(cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
+
+#else /* !USERMODE_DRIVER */
+
+_Must_inspect_result_
+_When_(fl & FL_ZERO_MEMORY, _Ret_opt_bytecount_(cjMemSize))
+_When_(!(fl & FL_ZERO_MEMORY), _Ret_opt_bytecap_(cjMemSize))
+ENGAPI
 PVOID
 APIENTRY
 EngAllocMem(
-  IN ULONG  Flags,
-  IN ULONG  MemSize,
-  IN ULONG  Tag);
+    _In_ ULONG fl,
+    _In_ ULONG cjMemSize,
+    _In_ ULONG ulTag);
 
-WIN32KAPI
+_Must_inspect_result_
+_Ret_opt_bytecount_(cjMemSize)
+ENGAPI
 PVOID
 APIENTRY
 EngAllocPrivateUserMem(
-  IN PDD_SURFACE_LOCAL  psl,
-  IN SIZE_T  cj,
-  IN ULONG  tag);
+    _In_ PDD_SURFACE_LOCAL psl,
+    _In_ SIZE_T cjMemSize,
+    _In_ ULONG ulTag);
 
-WIN32KAPI
+_Must_inspect_result_
+_Ret_opt_bytecount_(cjMemSize)
+ENGAPI
 PVOID
 APIENTRY
 EngAllocUserMem(
-  IN SIZE_T  cj,
-  IN ULONG  tag);
+    _In_ SIZE_T cjMemSize,
+    _In_ ULONG ulTag);
+
+#endif /* !USERMODE_DRIVER */
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngAlphaBlend(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN BLENDOBJ  *pBlendObj);
+    _Inout_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _In_ BLENDOBJ *pBlendObj);
 
 /* EngAssociateSurface.flHooks constants */
 #define HOOK_BITBLT                       0x00000001
@@ -1254,121 +1431,128 @@ EngAlphaBlend(
 #define HOOK_TRANSPARENTBLT               0x00008000
 #define HOOK_ALPHABLEND                   0x00010000
 #define HOOK_GRADIENTFILL                 0x00020000
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define HOOK_FLAGS                        0x0003b5ef
+#else
 #define HOOK_FLAGS                        0x0003b5ff
+#endif
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngAssociateSurface(
-  IN HSURF  hsurf,
-  IN HDEV  hdev,
-  IN FLONG  flHooks);
+    _In_ HSURF hsurf,
+    _In_ HDEV hdev,
+    _In_ FLONG flHooks);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngBitBlt(
-  IN SURFOBJ  *psoTrg,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclTrg,
-  IN POINTL  *pptlSrc,
-  IN POINTL  *pptlMask,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrush,
-  IN ROP4  rop4);
-
-WIN32KAPI
+    _Inout_ SURFOBJ *psoTrg,
+    _In_opt_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclTrg,
+    _In_opt_ POINTL *pptlSrc,
+    _In_opt_ POINTL *pptlMask,
+    _In_opt_ BRUSHOBJ *pbo,
+    _In_opt_ POINTL *pptlBrush,
+    _In_ ROP4 rop4);
+
+ENGAPI
 BOOL
 APIENTRY
 EngCheckAbort(
-  IN SURFOBJ  *pso);
+    _In_ SURFOBJ *pso);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngClearEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
-WIN32KAPI
+_Success_(return != 0)
+ENGAPI
 FD_GLYPHSET*
 APIENTRY
 EngComputeGlyphSet(
-  IN INT  nCodePage,
-  IN INT  nFirstChar,
-  IN INT  cChars);
+    _In_ INT nCodePage,
+    _In_ INT nFirstChar,
+    _In_ INT cChars);
 
 /* EngControlSprites.fl constants */
 #define ECS_TEARDOWN                      0x00000001
 #define ECS_REDRAW                        0x00000002
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngControlSprites(
-  IN WNDOBJ  *pwo,
-  IN FLONG  fl);
+    _Inout_ WNDOBJ *pwo,
+    _In_ FLONG fl);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngCopyBits(
-  OUT SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN POINTL  *pptlSrc);
-
-WIN32KAPI
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ __in_data_source(USER_MODE) RECTL *prclDest,
+    _In_ __in_data_source(USER_MODE) POINTL *pptlSrc);
+
+ENGAPI
 HBITMAP
 APIENTRY
 EngCreateBitmap(
-  IN SIZEL  sizl,
-  IN LONG  lWidth,
-  IN ULONG  iFormat,
-  IN FLONG  fl,
-  IN PVOID  pvBits);
+    _In_ SIZEL sizl,
+    _In_ LONG lWidth,
+    _In_ ULONG iFormat,
+    _In_ FLONG fl,
+    _In_opt_ PVOID pvBits);
 
-WIN32KAPI
+ENGAPI
 CLIPOBJ*
 APIENTRY
-EngCreateClip(
-  VOID);
+EngCreateClip(VOID);
 
-WIN32KAPI
+_Must_inspect_result_
+ENGAPI
 HBITMAP
 APIENTRY
 EngCreateDeviceBitmap(
-  IN DHSURF  dhsurf,
-  IN SIZEL  sizl,
-  IN ULONG  iFormatCompat);
+    _In_ DHSURF dhsurf,
+    _In_ SIZEL sizl,
+    _In_ ULONG iFormatCompat);
 
-WIN32KAPI
+_Must_inspect_result_
+ENGAPI
 HSURF
 APIENTRY
 EngCreateDeviceSurface(
-  DHSURF  dhsurf,
-  SIZEL  sizl,
-  ULONG  iFormatCompat);
+    _In_ DHSURF dhsurf,
+    _In_ SIZEL sizl,
+    _In_ ULONG iFormatCompat);
 
-#if 0
-WIN32KAPI
+_Must_inspect_result_
+ENGAPI
 HDRVOBJ
 APIENTRY
 EngCreateDriverObj(
-  PVOID  pvObj,
-  FREEOBJPROC  pFreeObjProc,
-  HDEV  hdev);
-#endif
+    _In_ PVOID pvObj,
+    _In_opt_ FREEOBJPROC pFreeObjProc,
+    _In_ HDEV hdev);
 
-WIN32KAPI
+_Must_inspect_result_
+_Success_(return != FALSE)
+ENGAPI
 BOOL
 APIENTRY
 EngCreateEvent(
-  OUT PEVENT  *ppEvent);
+    _Outptr_ PEVENT *ppEvent);
 
 /* EngCreatePalette.iMode constants */
 #define PAL_INDEXED                       0x00000001
@@ -1377,28 +1561,27 @@ EngCreateEvent(
 #define PAL_BGR                           0x00000008
 #define PAL_CMYK                          0x00000010
 
-WIN32KAPI
+_Must_inspect_result_
+ENGAPI
 HPALETTE
 APIENTRY
 EngCreatePalette(
-  IN ULONG  iMode,
-  IN ULONG  cColors,
-  IN ULONG  *pulColors,
-  IN FLONG  flRed,
-  IN FLONG  flGreen,
-  IN FLONG  flBlue);
-
-WIN32KAPI
+    _In_ ULONG iMode,
+    _In_ ULONG cColors,
+    _In_ ULONG *pulColors,
+    _In_ FLONG flRed,
+    _In_ FLONG flGreen,
+    _In_ FLONG flBlue);
+
+ENGAPI
 PATHOBJ*
 APIENTRY
-EngCreatePath(
-  VOID);
+EngCreatePath(VOID);
 
-WIN32KAPI
+ENGAPI
 HSEMAPHORE
 APIENTRY
-EngCreateSemaphore(
-  VOID);
+EngCreateSemaphore(VOID);
 
 /* EngCreateWnd.fl constants */
 #define WO_RGN_CLIENT_DELTA               0x00000001
@@ -1410,614 +1593,680 @@ EngCreateSemaphore(
 #define WO_DRAW_NOTIFY                    0x00000040
 #define WO_SPRITE_NOTIFY                  0x00000080
 #define WO_RGN_DESKTOP_COORD              0x00000100
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define WO_RGN_SPRITE                     0x00000200
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
-WIN32KAPI
+_Must_inspect_result_
+ENGAPI
 WNDOBJ*
 APIENTRY
 EngCreateWnd(
-  SURFOBJ  *pso,
-  HWND  hwnd,
-  WNDOBJCHANGEPROC  pfn,
-  FLONG  fl,
-  int  iPixelFormat);
-
-WIN32KAPI
+    _In_ SURFOBJ *pso,
+    _In_ HWND hwnd,
+    _In_ WNDOBJCHANGEPROC pfn,
+    _In_ FLONG fl,
+    _In_ INT iPixelFormat);
+
+_Analysis_noreturn_
+ENGAPI
 VOID
 APIENTRY
-EngDebugBreak(
-  VOID);
+EngDebugBreak(VOID);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngDebugPrint(
-  IN PCHAR StandardPrefix,
-  IN PCHAR DebugMessage,
-  IN va_list ap);
+    _In_z_ PCHAR StandardPrefix,
+    _In_z_ PCHAR DebugMessage,
+    _In_ va_list ap);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngDeleteClip(
-  IN CLIPOBJ  *pco);
+    _In_ _Post_ptr_invalid_ CLIPOBJ *pco);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngDeleteDriverObj(
-  IN HDRVOBJ  hdo,
-  IN BOOL  bCallBack,
-  IN BOOL  bLocked);
+    _In_ _Post_ptr_invalid_ HDRVOBJ hdo,
+    _In_ BOOL bCallBack,
+    _In_ BOOL bLocked);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngDeleteEvent(
-  IN PEVENT  pEvent);
+    _In_ _Post_ptr_invalid_ PEVENT pEvent);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngDeleteFile(
-  IN LPWSTR  pwszFileName);
+    _In_ LPWSTR pwszFileName);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngDeletePalette(
-  IN HPALETTE  hpal);
+    _In_ _Post_ptr_invalid_ HPALETTE hpal);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngDeletePath(
-  IN PATHOBJ  *ppo);
+    _In_ _Post_ptr_invalid_ PATHOBJ *ppo);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngDeleteSafeSemaphore(
-  IN OUT ENGSAFESEMAPHORE  *pssem);
+    _Inout_ ENGSAFESEMAPHORE *pssem);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngDeleteSemaphore(
-  IN OUT HSEMAPHORE  hsem);
+    _In_ _Post_ptr_invalid_ HSEMAPHORE hsem);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngDeleteSurface(
-  IN HSURF  hsurf);
+    _In_ _Post_ptr_invalid_ HSURF hsurf);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngDeleteWnd(
-  IN WNDOBJ  *pwo);
+    _In_ _Post_ptr_invalid_ WNDOBJ *pwo);
 
-WIN32KAPI
+_Success_(return==0)
+ENGAPI
 DWORD
 APIENTRY
 EngDeviceIoControl(
-  IN HANDLE  hDevice,
-  IN DWORD  dwIoControlCode,
-  IN LPVOID  lpInBuffer,
-  IN DWORD  nInBufferSize,
-  IN OUT LPVOID  lpOutBuffer,
-  IN DWORD  nOutBufferSize,
-  OUT LPDWORD  lpBytesReturned);
-
-WIN32KAPI
+    _In_ HANDLE hDevice,
+    _In_ DWORD dwIoControlCode,
+    _In_reads_bytes_opt_(cjInBufferSize) LPVOID lpInBuffer,
+    _In_ DWORD cjInBufferSize,
+    _Out_writes_bytes_opt_(cjOutBufferSize) LPVOID lpOutBuffer,
+    _In_ DWORD cjOutBufferSize,
+    _Out_ LPDWORD lpBytesReturned);
+
+#define DM_DEFAULT                        0x00000001
+#define DM_MONOCHROME                     0x00000002
+
+ENGAPI
 ULONG
 APIENTRY
 EngDitherColor(
-  IN HDEV  hdev,
-  IN ULONG  iMode,
-  IN ULONG  rgb,
-  OUT ULONG  *pul);
-
-WIN32KAPI
+    _In_ HDEV hdev,
+    _In_ ULONG iMode,
+    _In_ ULONG rgb,
+    _When_(iMode == DM_DEFAULT, _Out_writes_bytes_(16*8))
+    _When_(iMode == DM_MONOCHROME, _Out_writes_bytes_(8))
+        ULONG *pul);
+
+/* Obsolete in Windows 2000 and later */
+ENGAPI
+HRESULT
+APIENTRY
+EngDxIoctl(
+    _In_ ULONG ulIoctl,
+    _Inout_ PVOID pBuffer,
+    _In_ ULONG ulBufferSize);
+
+#ifdef USERMODE_DRIVER
+#define EngEnumForms        EnumForms
+#else /* !USERMODE_DRIVER */
+ENGAPI
 BOOL
 APIENTRY
 EngEnumForms(
-  IN HANDLE  hPrinter,
-  IN DWORD  Level,
-  OUT LPBYTE  pForm,
-  IN DWORD  cbBuf,
-  OUT LPDWORD  pcbNeeded,
-  OUT LPDWORD  pcReturned);
-
-WIN32KAPI
+    _In_ HANDLE hPrinter,
+    _In_ DWORD Level,
+    _Out_writes_bytes_opt_(cbBuf) LPBYTE pForm,
+    _In_ DWORD cbBuf,
+    _Out_ LPDWORD pcbNeeded,
+    _Out_ LPDWORD pcReturned);
+#endif /* !USERMODE_DRIVER */
+
+ENGAPI
 BOOL
 APIENTRY
 EngEraseSurface(
-  IN SURFOBJ  *pso,
-  IN RECTL  *prcl,
-  IN ULONG  iColor);
+    _In_ SURFOBJ *pso,
+    _In_ RECTL *prcl,
+    _In_ ULONG iColor);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngFillPath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix,
-  IN FLONG  flOptions);
-
-WIN32KAPI
+    _Inout_ SURFOBJ *pso,
+    _In_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_ BRUSHOBJ *pbo,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ MIX mix,
+    _In_ FLONG flOptions);
+
+#ifdef USERMODE_DRIVER
+#define EngFindImageProcAddress(h, procname) ((PVOID) GetProcAddress(h, procname))
+#else /* !USERMODE_DRIVER */
+ENGAPI
 PVOID
 APIENTRY
 EngFindImageProcAddress(
-  IN HANDLE  hModule,
-  IN LPSTR  lpProcName);
+    _In_ HANDLE hModule,
+    _In_ LPSTR lpProcName);
+#endif /* !USERMODE_DRIVER */
 
-WIN32KAPI
+ENGAPI
 PVOID
 APIENTRY
 EngFindResource(
-  IN HANDLE  h,
-  IN int  iName,
-  IN int  iType,
-  OUT PULONG  pulSize);
-
-WIN32KAPI
+    _In_ HANDLE h,
+    _In_ INT iName,
+    _In_ INT iType,
+    _Out_ PULONG pulSize);
+
+_Must_inspect_result_
+_Ret_opt_bytecap_(cjSize)
+ENGAPI
 PVOID
 APIENTRY
 EngFntCacheAlloc(
-  IN ULONG  FastCheckSum,
-  IN ULONG  ulSize);
+    _In_ ULONG ulFastCheckSum,
+    _In_ ULONG cjSize);
 
 /* EngFntCacheFault.iFaultMode constants */
 #define ENG_FNT_CACHE_READ_FAULT          0x00000001
 #define ENG_FNT_CACHE_WRITE_FAULT         0x00000002
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngFntCacheFault(
-  IN ULONG  ulFastCheckSum,
-  IN ULONG  iFaultMode);
+    _In_ ULONG ulFastCheckSum,
+    _In_ ULONG iFaultMode);
 
-WIN32KAPI
+ENGAPI
 PVOID
 APIENTRY
 EngFntCacheLookUp(
-  IN ULONG  FastCheckSum,
-  OUT ULONG  *pulSize);
+    _In_ ULONG FastCheckSum,
+    _Out_ ULONG *pulSize);
+
+#ifdef USERMODE_DRIVER
 
-WIN32KAPI
+#define EngFreeMem(p)               GlobalFree((HGLOBAL) (p))
+#define EngFreePrivateUserMem( psl, p)        GlobalFree((HGLOBAL) (p))
+#define EngFreeUserMem(p)           GlobalFree((HGLOBAL) (p))
+
+#else /* !USERMODE_DRIVER */
+
+ENGAPI
 VOID
 APIENTRY
 EngFreeMem(
-  IN PVOID  Mem);
+    _In_ _Post_ptr_invalid_ PVOID pv);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
-EngFreeModule(
-  IN HANDLE  h);
+EngFreePrivateUserMem(
+    _In_ PDD_SURFACE_LOCAL psl,
+    _In_ _Post_ptr_invalid_ PVOID  pv);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
-EngFreePrivateUserMem(
-  IN PDD_SURFACE_LOCAL  psl,
-  IN PVOID  pv);
+EngFreeUserMem(
+    _In_ _Post_ptr_invalid_ PVOID pv);
+
+#endif /* !USERMODE_DRIVER */
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
-EngFreeUserMem(
-  IN PVOID  pv);
+EngFreeModule(
+    _In_ HANDLE h);
+
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngGetCurrentCodePage(
-  OUT PUSHORT  OemCodePage,
-  OUT PUSHORT  AnsiCodePage);
+    _Out_ PUSHORT OemCodePage,
+    _Out_ PUSHORT AnsiCodePage);
 
-WIN32KAPI
+ENGAPI
 HANDLE
 APIENTRY
-EngGetCurrentProcessId(
-  VOID);
+EngGetCurrentProcessId(VOID);
 
-WIN32KAPI
+ENGAPI
 HANDLE
 APIENTRY
-EngGetCurrentThreadId(
-  VOID);
+EngGetCurrentThreadId(VOID);
 
-WIN32KAPI
+_Must_inspect_result_ _Ret_z_
+ENGAPI
 LPWSTR
 APIENTRY
 EngGetDriverName(
-  IN HDEV  hdev);
+    _In_ HDEV hdev);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngGetFileChangeTime(
-  IN HANDLE  h,
-  OUT LARGE_INTEGER  *pChangeTime);
+    _In_ HANDLE h,
+    _Out_ LARGE_INTEGER *pChangeTime);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngGetFilePath(
-  IN HANDLE  h,
-  OUT WCHAR  (*pDest)[MAX_PATH+1]);
-
-WIN32KAPI
+    _In_ HANDLE h,
+    _Out_ WCHAR (*pDest)[MAX_PATH+1]);
+
+#ifdef USERMODE_DRIVER
+#define EngGetForm GetForm
+#define EngGetLastError GetLastError
+#define EngGetPrinter GetPrinter
+#define EngGetPrinterData GetPrinterData
+#else /* !USERMODE_DRIVER */
+ENGAPI
 BOOL
 APIENTRY
 EngGetForm(
-  IN HANDLE  hPrinter,
-  IN LPWSTR  pFormName,
-  IN DWORD  Level,
-  OUT LPBYTE  pForm,
-  IN DWORD  cbBuf,
-  OUT LPDWORD  pcbNeeded);
-
-WIN32KAPI
+    _In_ HANDLE hPrinter,
+    _In_ LPWSTR pFormName,
+    _In_ DWORD Level,
+    _In_reads_bytes_opt_(cbBuf) LPBYTE pForm,
+    _In_ DWORD cbBuf,
+    _Out_ LPDWORD pcbNeeded);
+
+ENGAPI
 ULONG
 APIENTRY
-EngGetLastError(
-  VOID);
+EngGetLastError(VOID);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngGetPrinter(
-  IN HANDLE  hPrinter,
-  IN DWORD  dwLevel,
-  OUT LPBYTE  pPrinter,
-  IN DWORD  cbBuf,
-  OUT LPDWORD  pcbNeeded);
+    _In_ HANDLE hPrinter,
+    _In_ DWORD dwLevel,
+    _Out_writes_bytes_opt_(cbBuf) LPBYTE pPrinter,
+    _In_ DWORD  cbBuf,
+    _Out_ LPDWORD pcbNeeded);
 
-WIN32KAPI
+ENGAPI
 DWORD
 APIENTRY
 EngGetPrinterData(
-  IN HANDLE  hPrinter,
-  IN LPWSTR  pValueName,
-  OUT LPDWORD  pType,
-  OUT LPBYTE  pData,
-  IN DWORD  nSize,
-  OUT LPDWORD  pcbNeeded);
-
-WIN32KAPI
+    _In_ HANDLE hPrinter,
+    _In_ LPWSTR pValueName,
+    _Out_opt_ LPDWORD pType,
+    _Out_writes_bytes_opt_(cjSize) LPBYTE pData,
+    _In_ DWORD cjSize,
+    _Out_ LPDWORD pcjNeeded);
+#endif /* !USERMODE_DRIVER */
+
+ENGAPI
 LPWSTR
 APIENTRY
 EngGetPrinterDataFileName(
-  IN HDEV  hdev);
+    _In_ HDEV hdev);
 
-WIN32KAPI
+#ifdef USERMODE_DRIVER
+#define EngGetPrinterDriver GetPrinterDriver
+#else /* !USERMODE_DRIVER */
+ENGAPI
 BOOL
 APIENTRY
 EngGetPrinterDriver(
-  IN HANDLE  hPrinter,
-  IN LPWSTR  pEnvironment,
-  IN DWORD  dwLevel,
-  OUT BYTE  *lpbDrvInfo,
-  IN DWORD  cbBuf,
-  OUT DWORD  *pcbNeeded);
-
-WIN32KAPI
+    _In_ HANDLE hPrinter,
+    _In_opt_ LPWSTR pEnvironment,
+    _In_ DWORD dwLevel,
+    _Out_writes_bytes_opt_(cjBufSize) BYTE *lpbDrvInfo,
+    _In_ DWORD cjBufSize,
+    _Out_ DWORD *pcjNeeded);
+#endif /* !USERMODE_DRIVER */
+
+ENGAPI
 HANDLE
 APIENTRY
-EngGetProcessHandle(
-  VOID);
+EngGetProcessHandle(VOID);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngGetType1FontList(
-  IN HDEV  hdev,
-  OUT TYPE1_FONT  *pType1Buffer,
-  IN ULONG  cjType1Buffer,
-  OUT PULONG  pulLocalFonts,
-  OUT PULONG  pulRemoteFonts,
-  OUT LARGE_INTEGER  *pLastModified);
-
-WIN32KAPI
+    _In_ HDEV hdev,
+    _Out_writes_bytes_opt_(cjType1Buffer) TYPE1_FONT *pType1Buffer,
+    _In_ ULONG cjType1Buffer,
+    _Out_ PULONG pulLocalFonts,
+    _Out_ PULONG pulRemoteFonts,
+    _Out_ LARGE_INTEGER *pLastModified);
+
+ENGAPI
 BOOL
 APIENTRY
 EngGradientFill(
-  IN SURFOBJ  *psoDest,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN TRIVERTEX  *pVertex,
-  IN ULONG  nVertex,
-  IN PVOID  pMesh,
-  IN ULONG  nMesh,
-  IN RECTL  *prclExtents,
-  IN POINTL  *pptlDitherOrg,
-  IN ULONG  ulMode);
+    _Inout_ SURFOBJ *psoDest,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ TRIVERTEX *pVertex,
+    _In_ ULONG nVertex,
+    _In_ PVOID pMesh,
+    _In_ ULONG nMesh,
+    _In_ RECTL *prclExtents,
+    _In_ POINTL *pptlDitherOrg,
+    _In_ ULONG ulMode);
 
 /* EngHangNotification return values */
 #define EHN_RESTORED                      0x00000000
 #define EHN_ERROR                         0x00000001
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 EngHangNotification(
-  IN HDEV  hDev,
-  IN PVOID  Reserved);
+    _In_ HDEV hDev,
+    _Reserved_ PVOID Reserved);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngInitializeSafeSemaphore(
-  OUT ENGSAFESEMAPHORE  *pssem);
+    _Out_ ENGSAFESEMAPHORE *pssem);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngIsSemaphoreOwned(
-  IN HSEMAPHORE  hsem);
+    _In_ HSEMAPHORE hsem);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngIsSemaphoreOwnedByCurrentThread(
-  IN HSEMAPHORE  hsem);
+    _In_ HSEMAPHORE hsem);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngLineTo(
-  SURFOBJ  *pso,
-  CLIPOBJ  *pco,
-  BRUSHOBJ  *pbo,
-  LONG  x1,
-  LONG  y1,
-  LONG  x2,
-  LONG  y2,
-  RECTL  *prclBounds,
-  MIX  mix);
-
-WIN32KAPI
+    _Inout_ SURFOBJ *pso,
+    _In_ CLIPOBJ *pco,
+    _In_ BRUSHOBJ *pbo,
+    _In_ LONG x1,
+    _In_ LONG y1,
+    _In_ LONG x2,
+    _In_ LONG y2,
+    _In_opt_ RECTL *prclBounds,
+    _In_ MIX mix);
+
+#ifdef USERMODE_DRIVER
+#define EngLoadImage(pwszDriver) ((HANDLE)LoadLibraryW(pwszDriver))
+#else /* !USERMODE_DRIVER */
+ENGAPI
 HANDLE
 APIENTRY
 EngLoadImage(
-  IN LPWSTR  pwszDriver);
+    _In_ LPWSTR pwszDriver);
+#endif /* !USERMODE_DRIVER */
 
-WIN32KAPI
+ENGAPI
 HANDLE
 APIENTRY
 EngLoadModule(
-  IN LPWSTR  pwsz);
+    _In_ LPWSTR pwsz);
 
-WIN32KAPI
+ENGAPI
 HANDLE
 APIENTRY
 EngLoadModuleForWrite(
-  IN LPWSTR  pwsz,
-  IN ULONG  cjSizeOfModule);
+    _In_ LPWSTR pwsz,
+    _In_ ULONG cjSizeOfModule);
 
-WIN32KAPI
+ENGAPI
 PDD_SURFACE_LOCAL
 APIENTRY
 EngLockDirectDrawSurface(
-  IN HANDLE  hSurface);
+    _In_ HANDLE hSurface);
 
-WIN32KAPI
+ENGAPI
 DRIVEROBJ*
 APIENTRY
 EngLockDriverObj(
-  IN HDRVOBJ  hdo);
+    _In_ HDRVOBJ hdo);
 
-WIN32KAPI
+ENGAPI
 SURFOBJ*
 APIENTRY
 EngLockSurface(
-  IN HSURF  hsurf);
+    _In_ HSURF hsurf);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
-EngLpkInstalled(
-  VOID);
+EngLpkInstalled(VOID);
 
-WIN32KAPI
+ENGAPI
 PEVENT
 APIENTRY
 EngMapEvent(
-  IN HDEV  hDev,
-  IN HANDLE  hUserObject,
-  IN PVOID  Reserved1,
-  IN PVOID  Reserved2,
-  IN PVOID  Reserved3);
-
-WIN32KAPI
+    _In_ HDEV hDev,
+    _In_ HANDLE hUserObject,
+    _Reserved_ PVOID Reserved1,
+    _Reserved_ PVOID Reserved2,
+    _Reserved_ PVOID Reserved3);
+
+_Success_(return != 0)
+_When_(cjSize != 0, _At_(return, _Out_writes_bytes_(cjSize)))
+ENGAPI
 PVOID
 APIENTRY
 EngMapFile(
-  IN LPWSTR  pwsz,
-  IN ULONG  cjSize,
-  OUT ULONG_PTR  *piFile);
+    _In_ LPWSTR pwsz,
+    _In_ ULONG cjSize,
+    _Out_ ULONG_PTR *piFile);
 
-WIN32KAPI
+__drv_preferredFunction("EngMapFontFileFD", "Obsolete")
+ENGAPI
 BOOL
 APIENTRY
 EngMapFontFile(
-  ULONG_PTR  iFile,
-  PULONG  *ppjBuf,
-  ULONG  *pcjBuf);
+    _In_ ULONG_PTR iFile,
+    _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
+    _Out_ ULONG *pcjBuf);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngMapFontFileFD(
-  IN ULONG_PTR  iFile,
-  OUT PULONG  *ppjBuf,
-  OUT ULONG  *pcjBuf);
+    _In_ ULONG_PTR iFile,
+    _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
+    _Out_ ULONG *pcjBuf);
 
-WIN32KAPI
+ENGAPI
 PVOID
 APIENTRY
 EngMapModule(
-  IN HANDLE  h,
-  OUT PULONG  pSize);
+    _In_ HANDLE h,
+    _Out_ PULONG pSize);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngMarkBandingSurface(
-  IN HSURF  hsurf);
+    _In_ HSURF hsurf);
 
 /* EngModifySurface.flSurface constants */
 #define MS_NOTSYSTEMMEMORY                0x00000001
 #define MS_SHAREDACCESS                   0x00000002
+#define MS_CDDDEVICEBITMAP                0x00000004
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngModifySurface(
-  IN HSURF  hsurf,
-  IN HDEV  hdev,
-  IN FLONG  flHooks,
-  IN FLONG  flSurface,
-  IN DHSURF  dhsurf,
-  IN VOID  *pvScan0,
-  IN LONG  lDelta,
-  IN VOID  *pvReserved);
-
-WIN32KAPI
+    _In_ HSURF hsurf,
+    _In_ HDEV hdev,
+    _In_ FLONG flHooks,
+    _In_ FLONG flSurface,
+    _In_ DHSURF dhsurf,
+    _In_ PVOID pvScan0,
+    _In_ LONG lDelta,
+    _Reserved_ PVOID pvReserved);
+
+ENGAPI
 VOID
 APIENTRY
 EngMovePointer(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl);
-
-WIN32KAPI
-int
+    _In_ SURFOBJ *pso,
+    _In_ LONG x,
+    _In_ LONG y,
+    _In_ RECTL *prcl);
+
+#ifdef USERMODE_DRIVER
+#define EngMulDiv MulDiv
+#else /* !USERMODE_DRIVER */
+ENGAPI
+INT
 APIENTRY
 EngMulDiv(
-  IN int  a,
-  IN int  b,
-  IN int  c);
+    _In_ INT a,
+    _In_ INT b,
+    _In_ INT c);
+#endif /* !USERMODE_DRIVER */
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngMultiByteToUnicodeN(
-  OUT LPWSTR  UnicodeString,
-  IN ULONG  MaxBytesInUnicodeString,
-  OUT PULONG  BytesInUnicodeString,
-  IN PCHAR  MultiByteString,
-  IN ULONG  BytesInMultiByteString);
+    _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) LPWSTR UnicodeString,
+    _In_ ULONG MaxBytesInUnicodeString,
+    _Out_opt_ PULONG BytesInUnicodeString,
+    _In_reads_bytes_(BytesInMultiByteString) PCHAR MultiByteString,
+    _In_ ULONG BytesInMultiByteString);
 
-WIN32KAPI
+ENGAPI
 INT
 APIENTRY
 EngMultiByteToWideChar(
-  IN UINT  CodePage,
-  OUT LPWSTR  WideCharString,
-  IN INT  BytesInWideCharString,
-  IN LPSTR  MultiByteString,
-  IN INT  BytesInMultiByteString);
+    _In_ UINT CodePage,
+    _Out_writes_bytes_opt_(cjWideCharString) LPWSTR WideCharString,
+    _In_ INT cjWideCharString,
+    _In_reads_bytes_opt_(cjMultiByteString) LPSTR MultiByteString,
+    _In_ INT cjMultiByteString);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngPaint(
-  IN SURFOBJ  *pso,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix);
+    _In_ SURFOBJ *pso,
+    _In_ CLIPOBJ *pco,
+    _In_ BRUSHOBJ *pbo,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ __in_data_source(USER_MODE) MIX mix);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngPlgBlt(
-  IN SURFOBJ  *psoTrg,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMsk,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlBrushOrg,
-  IN POINTFIX  *pptfx,
-  IN RECTL  *prcl,
-  IN POINTL  *pptl,
-  IN ULONG  iMode);
-
-WIN32KAPI
+    _In_ SURFOBJ *psoTrg,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMsk,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ COLORADJUSTMENT *pca,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ POINTFIX *pptfx,
+    _In_ RECTL *prcl,
+    _When_(psoMsk, _In_) POINTL *pptl,
+    _In_ __in_data_source(USER_MODE) ULONG iMode);
+
+ENGAPI
 VOID
 APIENTRY
 EngProbeForRead(
-  IN PVOID  Address,
-  IN ULONG  Length,
-  IN ULONG  Alignment);
+    _In_reads_bytes_(Length) PVOID Address,
+    _In_ SIZE_T Length,
+    _In_ ULONG Alignment);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngProbeForReadAndWrite(
-  IN PVOID  Address,
-  IN ULONG  Length,
-  IN ULONG  Alignment);
+    _Inout_updates_bytes_(Length) PVOID Address,
+    _In_ SIZE_T Length,
+    _In_ ULONG Alignment);
 
 typedef enum _ENG_DEVICE_ATTRIBUTE {
   QDA_RESERVED = 0,
   QDA_ACCELERATION_LEVEL
 } ENG_DEVICE_ATTRIBUTE;
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngQueryDeviceAttribute(
-  IN HDEV  hdev,
-  IN ENG_DEVICE_ATTRIBUTE  devAttr,
-  IN VOID  *pvIn,
-  IN ULONG  ulInSize,
-  OUT VOID  *pvOut,
-  OUT ULONG  ulOutSize);
-
-WIN32KAPI
+    _In_ HDEV hdev,
+    _In_ ENG_DEVICE_ATTRIBUTE devAttr,
+    _In_reads_bytes_(cjInSize) PVOID pvIn,
+    _In_ ULONG cjInSize,
+    _Out_writes_bytes_(cjOutSize) PVOID pvOut,
+    _In_ ULONG cjOutSize);
+
+/* Obsolete in Windows 2000 and later */
+DECLSPEC_DEPRECATED_DDK
+BOOL APIENTRY
+EngQueryEMFInfo(
+    _In_ HDEV hdev,
+    _Out_ EMFINFO *pEMFInfo);
+
+ENGAPI
 LARGE_INTEGER
 APIENTRY
 EngQueryFileTimeStamp(
-  IN LPWSTR  pwsz);
+    _In_ LPWSTR pwsz);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngQueryLocalTime(
-  OUT PENG_TIME_FIELDS  ptf);
+    _Out_ PENG_TIME_FIELDS ptf);
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 EngQueryPalette(
-  IN HPALETTE  hPal,
-  OUT ULONG  *piMode,
-  IN ULONG  cColors,
-  OUT ULONG  *pulColors);
+    _In_ HPALETTE hPal,
+    _Out_ ULONG *piMode,
+    _In_ ULONG cColors,
+    _Out_writes_opt_(cColors) ULONG *pulColors);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngQueryPerformanceCounter(
-  OUT LONGLONG  *pPerformanceCount);
+    _Out_ LONGLONG *pPerformanceCount);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngQueryPerformanceFrequency(
-  OUT LONGLONG  *pFrequency);
+    _Out_ LONGLONG *pFrequency);
 
 typedef enum _ENG_SYSTEM_ATTRIBUTE {
   EngProcessorFeature = 1,
@@ -2029,442 +2278,520 @@ typedef enum _ENG_SYSTEM_ATTRIBUTE {
 #define QSA_MMX                           0x00000100
 #define QSA_SSE                           0x00002000
 #define QSA_3DNOW                         0x00004000
-
-WIN32KAPI
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+#define QSA_SSE1                          QSA_SSE
+#define QSA_SSE2                          0x00010000
+#define QSA_SSE3                          0x00080000
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+_Check_return_
+_Success_(return)
+ENGAPI
 BOOL
 APIENTRY
 EngQuerySystemAttribute(
-  IN ENG_SYSTEM_ATTRIBUTE  CapNum,
-  OUT PDWORD  pCapability);
+    _In_ ENG_SYSTEM_ATTRIBUTE CapNum,
+    _Out_ PDWORD pCapability);
 
-WIN32KAPI
+ENGAPI
 LONG
 APIENTRY
 EngReadStateEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngReleaseSemaphore(
-  IN HSEMAPHORE  hsem);
+    _In_ HSEMAPHORE hsem);
+
+#if defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA)
 
-WIN32KAPI
+_Check_return_
+_Success_(return)
+_Kernel_float_restored_
+_At_(*pBuffer, _Kernel_requires_resource_held_(EngFloatState)
+               _Kernel_releases_resource_(EngFloatState))
+ENGAPI
 BOOL
 APIENTRY
 EngRestoreFloatingPointState(
-  IN VOID  *pBuffer);
+    _In_reads_(_Inexpressible_(statesize))
+    PVOID pBuffer)
+{
+    UNREFERENCED_PARAMETER(pBuffer);
+    return TRUE;
+}
+
+_Check_return_
+_Success_(((pBuffer != NULL && cjBufferSize != 0) && return == 1) ||
+          ((pBuffer == NULL || cjBufferSize == 0) && return > 0))
+_When_(pBuffer != NULL && cjBufferSize != 0 && return == 1, _Kernel_float_saved_
+    _At_(*pBuffer, _Post_valid_ _Kernel_acquires_resource_(EngFloatState)))
+_On_failure_(_Post_satisfies_(return == 0))
+ENGAPI
+ULONG
+APIENTRY
+EngSaveFloatingPointState(
+    _At_(*pBuffer, _Kernel_requires_resource_not_held_(EngFloatState))
+    _Out_writes_bytes_opt_(cjBufferSize) PVOID pBuffer,
+    _Inout_ ULONG cjBufferSize)
+{
+    return ((((pBuffer) == NULL) || ((cjBufferSize) == 0)) ? 8 : TRUE);
+}
 
-WIN32KAPI
+#else /* !(defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA)) */
+
+_Check_return_
+_Success_(return)
+_Kernel_float_restored_
+_At_(*pBuffer, _Kernel_requires_resource_held_(EngFloatState)
+               _Kernel_releases_resource_(EngFloatState))
+ENGAPI
+BOOL
+APIENTRY
+EngRestoreFloatingPointState(
+    _In_reads_(_Inexpressible_(statesize))
+    PVOID pBuffer);
+
+_Check_return_
+_Success_(((pBuffer != NULL && cjBufferSize != 0) && return == 1) ||
+          ((pBuffer == NULL || cjBufferSize == 0) && return > 0))
+_When_(pBuffer != NULL && cjBufferSize != 0 && return == 1, _Kernel_float_saved_
+    _At_(*pBuffer, _Post_valid_ _Kernel_acquires_resource_(EngFloatState)))
+_On_failure_(_Post_satisfies_(return == 0))
+ENGAPI
 ULONG
 APIENTRY
 EngSaveFloatingPointState(
-  OUT VOID  *pBuffer,
-  IN ULONG  cjBufferSize);
+    _At_(*pBuffer, _Kernel_requires_resource_not_held_(EngFloatState))
+    _Out_writes_bytes_opt_(cjBufferSize) PVOID pBuffer,
+    _Inout_ ULONG cjBufferSize);
 
-WIN32KAPI
+
+#endif /* defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA) */
+
+ENGAPI
 HANDLE
 APIENTRY
 EngSecureMem(
-  IN PVOID  Address,
-  IN ULONG  Length);
+    _In_reads_bytes_(cjLength) PVOID Address,
+    _In_ ULONG cjLength);
 
-WIN32KAPI
+ENGAPI
 LONG
 APIENTRY
 EngSetEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
-WIN32KAPI
+#ifdef USERMODE_DRIVER
+#define EngSetLastError SetLastError
+#else /* !USERMODE_DRIVER */
+ENGAPI
 VOID
 APIENTRY
 EngSetLastError(
-  IN ULONG  iError);
+    _In_ ULONG iError);
+#endif /* !USERMODE_DRIVER */
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 EngSetPointerShape(
-  IN SURFOBJ  *pso,
-  IN SURFOBJ  *psoMask,
-  IN SURFOBJ  *psoColor,
-  IN XLATEOBJ  *pxlo,
-  IN LONG  xHot,
-  IN LONG  yHot,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl,
-  IN FLONG  fl);
-
-WIN32KAPI
+    _In_ SURFOBJ *pso,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ SURFOBJ *psoColor,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ LONG xHot,
+    _In_ LONG yHot,
+    _In_ LONG x,
+    _In_ LONG y,
+    _In_ RECTL *prcl,
+    _In_ FLONG fl);
+
+__drv_preferredFunction("(see documentation)", "Obsolete, always returns false. ")
+ENGAPI
 BOOL
 APIENTRY
 EngSetPointerTag(
-  IN HDEV  hdev,
-  IN SURFOBJ  *psoMask,
-  IN SURFOBJ  *psoColor,
-  IN XLATEOBJ  *pxlo,
-  IN FLONG  fl);
-
-WIN32KAPI
+    _In_ HDEV hdev,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ SURFOBJ *psoColor,
+    _Reserved_ XLATEOBJ *pxlo,
+    _In_ FLONG fl);
+
+#ifdef USERMODE_DRIVER
+#define EngSetPrinterData   SetPrinterData
+#else /* !USERMODE_DRIVER */
+ENGAPI
 DWORD
 APIENTRY
 EngSetPrinterData(
-  IN HANDLE  hPrinter,
-  IN LPWSTR  pType,
-  IN DWORD  dwType,
-  IN LPBYTE  lpbPrinterData,
-  IN DWORD  cjPrinterData);
+    _In_ HANDLE hPrinter,
+    _In_ LPWSTR pType,
+    _In_ DWORD dwType,
+    _In_reads_bytes_(cjPrinterData) LPBYTE lpbPrinterData,
+    _In_ DWORD cjPrinterData);
+#endif /* !USERMODE_DRIVER */
 
 typedef int (CDECL *SORTCOMP)(const void *pv1, const void *pv2);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngSort(
-  IN OUT PBYTE  pjBuf,
-  IN ULONG  c,
-  IN ULONG  cjElem,
-  IN SORTCOMP  pfnComp);
+    _Inout_updates_bytes_(c * cjElem) PBYTE pjBuf,
+    _In_ ULONG c,
+    _In_ ULONG cjElem,
+    _In_ SORTCOMP pfnComp);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngStretchBlt(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlHTOrg,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN POINTL  *pptlMask,
-  IN ULONG  iMode);
-
-WIN32KAPI
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_opt_ COLORADJUSTMENT *pca,
+    _In_ POINTL *pptlHTOrg,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _When_(psoMask, _In_) POINTL *pptlMask,
+    _In_ ULONG iMode);
+
+ENGAPI
 BOOL
 APIENTRY
 EngStretchBltROP(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlHTOrg,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN POINTL  *pptlMask,
-  IN ULONG  iMode,
-  IN BRUSHOBJ  *pbo,
-  IN DWORD  rop4);
-
-WIN32KAPI
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_opt_ COLORADJUSTMENT *pca,
+    _In_ POINTL *pptlHTOrg,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _When_(psoMask, _In_) POINTL *pptlMask,
+    _In_ ULONG iMode,
+    _In_opt_ BRUSHOBJ *pbo,
+    _In_ DWORD rop4);
+
+ENGAPI
 BOOL
 APIENTRY
 EngStrokeAndFillPath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN XFORMOBJ  *pxo,
-  IN BRUSHOBJ  *pboStroke,
-  IN LINEATTRS  *plineattrs,
-  IN BRUSHOBJ  *pboFill,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mixFill,
-  IN FLONG  flOptions);
-
-WIN32KAPI
+    _Inout_ SURFOBJ *pso,
+    _In_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_ XFORMOBJ *pxo,
+    _In_ BRUSHOBJ *pboStroke,
+    _In_ LINEATTRS *plineattrs,
+    _In_ BRUSHOBJ *pboFill,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ __in_data_source(USER_MODE) MIX mixFill,
+    _In_ __in_data_source(USER_MODE) FLONG flOptions);
+
+ENGAPI
 BOOL
 APIENTRY
 EngStrokePath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN XFORMOBJ  *pxo,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN LINEATTRS  *plineattrs,
-  IN MIX  mix);
-
-WIN32KAPI
+    _In_ SURFOBJ *pso,
+    _In_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_ XFORMOBJ *pxo,
+    _In_ BRUSHOBJ *pbo,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ LINEATTRS *plineattrs,
+    _In_ MIX mix);
+
+ENGAPI
 BOOL
 APIENTRY
 EngTextOut(
-  IN SURFOBJ  *pso,
-  IN STROBJ  *pstro,
-  IN FONTOBJ  *pfo,
-  IN CLIPOBJ  *pco,
-  IN RECTL  *prclExtra,
-  IN RECTL  *prclOpaque,
-  IN BRUSHOBJ  *pboFore,
-  IN BRUSHOBJ  *pboOpaque,
-  IN POINTL  *pptlOrg,
-  IN MIX  mix);
-
-WIN32KAPI
+    _In_ SURFOBJ *pso,
+    _In_ STROBJ *pstro,
+    _In_ FONTOBJ *pfo,
+    _In_ CLIPOBJ *pco,
+    _Null_ RECTL *prclExtra,
+    _In_opt_ RECTL *prclOpaque,
+    _In_ BRUSHOBJ *pboFore,
+    _In_ BRUSHOBJ *pboOpaque,
+    _In_ POINTL *pptlOrg,
+    _In_ MIX mix);
+
+ENGAPI
 BOOL
 APIENTRY
 EngTransparentBlt(
-  IN SURFOBJ  *psoDst,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDst,
-  IN RECTL  *prclSrc,
-  IN ULONG  iTransColor,
-  IN ULONG  ulReserved);
-
-WIN32KAPI
+    _In_ SURFOBJ *psoDst,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDst,
+    _In_ RECTL *prclSrc,
+    _In_ ULONG iTransColor,
+    _In_ ULONG ulReserved);
+
+ENGAPI
 VOID
 APIENTRY
 EngUnicodeToMultiByteN(
-  OUT PCHAR  MultiByteString,
-  IN ULONG  MaxBytesInMultiByteString,
-  OUT PULONG  BytesInMultiByteString,
-  IN PWSTR  UnicodeString,
-  IN ULONG  BytesInUnicodeString);
-
-WIN32KAPI
+    _Out_writes_bytes_to_(cjMultiByteBuf, *pcjMultiByteString) PCHAR pchMultiByteString,
+    _In_ ULONG cjMultiByteBuf,
+    _Out_opt_ PULONG pcjMultiByteString,
+    _In_reads_bytes_(cjUnicodeString) PWSTR pwszUnicodeString,
+    _In_ ULONG cjUnicodeString);
+
+#ifdef USERMODE_DRIVER
+#define EngUnloadImage(h) FreeLibrary((HMODULE) (h))
+#else /* !USERMODE_DRIVER */
+ENGAPI
 VOID
 APIENTRY
 EngUnloadImage(
-  IN HANDLE  hModule);
+    _In_ HANDLE hModule);
+#endif /* !USERMODE_DRIVER */
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngUnlockDirectDrawSurface(
-  IN PDD_SURFACE_LOCAL  pSurface);
+    _In_ PDD_SURFACE_LOCAL pSurface);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngUnlockDriverObj(
-  IN HDRVOBJ  hdo);
+    _In_ _Post_ptr_invalid_ HDRVOBJ hdo);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngUnlockSurface(
-  IN SURFOBJ  *pso);
+    _In_ _Post_ptr_invalid_ SURFOBJ *pso);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngUnmapEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngUnmapFile(
-  IN ULONG_PTR  iFile);
+    _In_ ULONG_PTR iFile);
 
-WIN32KAPI
+__drv_preferredFunction("EngUnmapFontFileFD", "Obsolete")
+ENGAPI
 VOID
 APIENTRY
 EngUnmapFontFile(
-  ULONG_PTR  iFile);
+    _In_ ULONG_PTR iFile);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngUnmapFontFileFD(
-  IN ULONG_PTR  iFile);
+    _In_ ULONG_PTR iFile);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 EngUnsecureMem(
-  IN HANDLE  hSecure);
+    _In_ HANDLE hSecure);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 EngWaitForSingleObject(
-  IN PEVENT  pEvent,
-  IN PLARGE_INTEGER  pTimeOut);
+    _In_ PEVENT pEvent,
+    _In_opt_ PLARGE_INTEGER pTimeOut);
 
-WIN32KAPI
+ENGAPI
 INT
 APIENTRY
 EngWideCharToMultiByte(
-  IN UINT  CodePage,
-  IN LPWSTR  WideCharString,
-  IN INT  BytesInWideCharString,
-  OUT LPSTR  MultiByteString,
-  IN INT  BytesInMultiByteString);
-
-WIN32KAPI
+    _In_ UINT CodePage,
+    _In_reads_bytes_opt_(cjWideCharString) LPWSTR pwszWideCharString,
+    _In_ INT cjWideCharString,
+    _Out_z_bytecap_(cjMultiByteString) LPSTR pszMultiByteString,
+    _In_ INT cjMultiByteString);
+
+#ifdef USERMODE_DRIVER
+#define EngWritePrinter WritePrinter
+#else /* !USERMODE_DRIVER */
+ENGAPI
 BOOL
 APIENTRY
 EngWritePrinter(
-  IN HANDLE  hPrinter,
-  IN LPVOID  pBuf,
-  IN DWORD  cbBuf,
-  OUT LPDWORD  pcWritten);
+    _In_ HANDLE hPrinter,
+    _In_reads_bytes_(cjBuf) LPVOID pvBuf,
+    _In_ DWORD cjBuf,
+    _Out_ LPDWORD pcWritten);
+#endif /* !USERMODE_DRIVER */
 
 #if defined(_X86_) && !defined(USERMODE_DRIVER)
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_Add(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_AddFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_AddLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_Div(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_DivFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_DivLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 FLOATOBJ_Equal(
-  IN PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _In_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 FLOATOBJ_EqualLong(
-  IN PFLOATOBJ  pf,
-  IN LONG  l);
+    _In_ PFLOATOBJ pf,
+    _In_ LONG l);
 
-WIN32KAPI
+ENGAPI
 LONG
 APIENTRY
 FLOATOBJ_GetFloat(
-  IN PFLOATOBJ  pf);
+    _In_ PFLOATOBJ pf);
 
-WIN32KAPI
+ENGAPI
 LONG
 APIENTRY
 FLOATOBJ_GetLong(
-  IN PFLOATOBJ  pf);
+    _In_ PFLOATOBJ pf);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 FLOATOBJ_GreaterThan(
-  IN PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _In_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 FLOATOBJ_GreaterThanLong(
-  IN PFLOATOBJ  pf,
-  IN LONG  l);
+    _In_ PFLOATOBJ pf,
+    _In_ LONG l);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 FLOATOBJ_LessThan(
-  IN PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _In_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 FLOATOBJ_LessThanLong(
-  IN PFLOATOBJ  pf,
-  IN LONG  l);
+    _In_ PFLOATOBJ pf,
+    _In_ LONG l);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_Mul(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_MulFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_MulLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_Neg(
-  IN OUT PFLOATOBJ  pf);
+    _Inout_ PFLOATOBJ pf);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_SetFloat(
-  OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Out_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_SetLong(
-  OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Out_ PFLOATOBJ pf,
+    _In_ LONG l);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_Sub(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_SubFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FLOATOBJ_SubLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 #else
 
@@ -2494,265 +2821,273 @@ FLOATOBJ_SubLong(
 
 #endif
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 FONTOBJ_cGetAllGlyphHandles(
-  IN FONTOBJ  *pfo,
-  OUT HGLYPH  *phg);
+    _In_ FONTOBJ *pfo,
+    _Out_opt_ HGLYPH *phg);
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 FONTOBJ_cGetGlyphs(
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN ULONG  cGlyph,
-  IN HGLYPH  *phg,
-  OUT PVOID  *ppvGlyph);
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode,
+    _In_ ULONG cGlyph,
+    _In_count_(cGlyph) HGLYPH *phg,
+    _Out_ PVOID *ppvGlyph);
 
-WIN32KAPI
+ENGAPI
 FD_GLYPHSET*
 APIENTRY
 FONTOBJ_pfdg(
-  IN FONTOBJ  *pfo);
+    _In_ FONTOBJ *pfo);
 
-WIN32KAPI
+ENGAPI
 IFIMETRICS*
 APIENTRY
 FONTOBJ_pifi(
-  IN FONTOBJ  *pfo);
+    _In_ FONTOBJ *pfo);
 
-WIN32KAPI
+_Ret_opt_bytecount_(*pcjTable)
+ENGAPI
 PBYTE
 APIENTRY
 FONTOBJ_pjOpenTypeTablePointer(
-  IN FONTOBJ  *pfo,
-  IN ULONG  ulTag,
-  OUT ULONG  *pcjTable);
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG ulTag,
+    _Out_ ULONG *pcjTable);
 
-WIN32KAPI
+ENGAPI
 PFD_GLYPHATTR
 APIENTRY
 FONTOBJ_pQueryGlyphAttrs(
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode);
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode);
 
-WIN32KAPI
+_Ret_opt_bytecount_(*pcjFile)
+ENGAPI
 PVOID
 APIENTRY
 FONTOBJ_pvTrueTypeFontFile(
-  IN FONTOBJ  *pfo,
-  OUT ULONG  *pcjFile);
+    _In_ FONTOBJ *pfo,
+    _Out_ ULONG *pcjFile);
 
-WIN32KAPI
+ENGAPI
 LPWSTR
 APIENTRY
 FONTOBJ_pwszFontFilePaths(
-  IN FONTOBJ  *pfo,
-  OUT ULONG  *pcwc);
+    _In_ FONTOBJ *pfo,
+    _Out_ ULONG *pcwc);
 
-WIN32KAPI
+ENGAPI
 XFORMOBJ*
 APIENTRY
 FONTOBJ_pxoGetXform(
-  IN FONTOBJ  *pfo);
+    _In_ FONTOBJ *pfo);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 FONTOBJ_vGetInfo(
-  IN FONTOBJ  *pfo,
-  IN ULONG  cjSize,
-  OUT FONTINFO  *pfi);
-
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG cjSize,
+    _Out_bytecap_(cjSize) FONTINFO *pfi);
 
+#if (NTDDI_VERSION <= NTDDI_WINXP)
+ /* Obsolete in Windows 2000 and later */
+GAMMA_TABLES*
+APIENTRY
+FONTOBJ_pGetGammaTables(
+    _In_ FONTOBJ *pfo);
+#endif
 
-WIN32KAPI
+ENGAPI
 LONG
 APIENTRY
 HT_ComputeRGBGammaTable(
-  IN USHORT  GammaTableEntries,
-  IN USHORT  GammaTableType,
-  IN USHORT  RedGamma,
-  IN USHORT  GreenGamma,
-  IN USHORT  BlueGamma,
-  OUT LPBYTE  pGammaTable);
-
-WIN32KAPI
+    _In_ USHORT GammaTableEntries,
+    _In_ USHORT GammaTableType,
+    _In_ USHORT RedGamma,
+    _In_ USHORT GreenGamma,
+    _In_ USHORT BlueGamma,
+    _Out_writes_bytes_(GammaTableEntries * 3) LPBYTE pGammaTable);
+
+ENGAPI
 LONG
 APIENTRY
 HT_Get8BPPFormatPalette(
-  OUT LPPALETTEENTRY  pPaletteEntry,
-  IN USHORT  RedGamma,
-  IN USHORT  GreenGamma,
-  IN USHORT  BlueGamma);
+    _Out_opt_ LPPALETTEENTRY pPaletteEntry,
+    _In_ USHORT RedGamma,
+    _In_ USHORT GreenGamma,
+    _In_ USHORT BlueGamma);
 
-WIN32KAPI
+ENGAPI
 LONG
 APIENTRY
 HT_Get8BPPMaskPalette(
-  IN OUT LPPALETTEENTRY  pPaletteEntry,
-  IN BOOL  Use8BPPMaskPal,
-  IN BYTE  CMYMask,
-  IN USHORT  RedGamma,
-  IN USHORT  GreenGamma,
-  IN USHORT  BlueGamma);
-
-WIN32KAPI
+    _Out_opt_ LPPALETTEENTRY pPaletteEntry,
+    _In_ BOOL Use8BPPMaskPal,
+    _In_ BYTE CMYMask,
+    _In_ USHORT RedGamma,
+    _In_ USHORT GreenGamma,
+    _In_ USHORT BlueGamma);
+
+ENGAPI
 LONG
 APIENTRY
 HTUI_DeviceColorAdjustment(
-  IN LPSTR  pDeviceName,
-  OUT PDEVHTADJDATA  pDevHTAdjData);
+    _In_ LPSTR pDeviceName,
+    _Out_ PDEVHTADJDATA pDevHTAdjData);
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 PALOBJ_cGetColors(
-  IN PALOBJ  *ppalo,
-  IN ULONG  iStart,
-  IN ULONG  cColors,
-  OUT ULONG  *pulColors);
+    _In_ PALOBJ *ppalo,
+    _In_ ULONG iStart,
+    _In_ ULONG cColors,
+    _Out_writes_(cColors) ULONG *pulColors);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 PATHOBJ_bCloseFigure(
-  IN PATHOBJ  *ppo);
+    _In_ PATHOBJ *ppo);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 PATHOBJ_bEnum(
-  IN PATHOBJ  *ppo,
-  OUT PATHDATA  *ppd);
+    _In_ PATHOBJ *ppo,
+    _Out_ PATHDATA *ppd);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 PATHOBJ_bEnumClipLines(
-  IN PATHOBJ  *ppo,
-  IN ULONG  cb,
-  OUT CLIPLINE  *pcl);
+    _In_ PATHOBJ *ppo,
+    _In_ ULONG cj,
+    _Out_bytecap_(cj) CLIPLINE *pcl);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 PATHOBJ_bMoveTo(
-  IN PATHOBJ  *ppo,
-  IN POINTFIX  ptfx);
+    _In_ PATHOBJ *ppo,
+    _In_ POINTFIX ptfx);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 PATHOBJ_bPolyBezierTo(
-  IN PATHOBJ  *ppo,
-  IN POINTFIX  *pptfx,
-  IN ULONG  cptfx);
+    _In_ PATHOBJ *ppo,
+    _In_count_(cptfx) POINTFIX *pptfx,
+    _In_ ULONG cptfx);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 PATHOBJ_bPolyLineTo(
-  IN PATHOBJ  *ppo,
-  IN POINTFIX  *pptfx,
-  IN ULONG  cptfx);
+    _In_ PATHOBJ *ppo,
+    _In_count_(cptfx) POINTFIX *pptfx,
+    _In_ ULONG cptfx);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 PATHOBJ_vEnumStart(
-  IN PATHOBJ  *ppo);
+    _Inout_ PATHOBJ *ppo);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 PATHOBJ_vEnumStartClipLines(
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN SURFOBJ  *pso,
-  IN LINEATTRS  *pla);
+    _Inout_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_ SURFOBJ *pso,
+    _In_ LINEATTRS *pla);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 PATHOBJ_vGetBounds(
-  IN PATHOBJ  *ppo,
-  OUT PRECTFX  prectfx);
+    _In_ PATHOBJ *ppo,
+    _Out_ PRECTFX prectfx);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 STROBJ_bEnum(
-  IN STROBJ  *pstro,
-  OUT ULONG  *pc,
-  OUT PGLYPHPOS  *ppgpos);
+    _Inout_ STROBJ *pstro,
+    _Out_ ULONG *pc,
+    _Out_ PGLYPHPOS *ppgpos); // FIXME_ size?
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 STROBJ_bEnumPositionsOnly(
-  IN STROBJ  *pstro,
-  OUT ULONG  *pc,
-  OUT PGLYPHPOS  *ppgpos);
+    _In_ STROBJ *pstro,
+    _Out_ ULONG *pc,
+    _Out_ PGLYPHPOS *ppgpos); // FIXME_ size?
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 STROBJ_bGetAdvanceWidths(
-  IN STROBJ  *pso,
-  IN ULONG  iFirst,
-  IN ULONG  c,
-  OUT POINTQF  *pptqD);
+    _In_ STROBJ *pso,
+    _In_ ULONG iFirst,
+    _In_ ULONG c,
+    _Out_cap_(c) POINTQF *pptqD);
 
-WIN32KAPI
+ENGAPI
 DWORD
 APIENTRY
 STROBJ_dwGetCodePage(
-  IN STROBJ  *pstro);
+    _In_ STROBJ *pstro);
 
-WIN32KAPI
+ENGAPI
 FIX
 APIENTRY
 STROBJ_fxBreakExtra(
-  IN STROBJ  *pstro);
+    _In_ STROBJ *pstro);
 
-WIN32KAPI
+ENGAPI
 FIX
 APIENTRY
 STROBJ_fxCharacterExtra(
-  IN STROBJ  *pstro);
+    _In_ STROBJ *pstro);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 STROBJ_vEnumStart(
-  IN STROBJ  *pstro);
+    _Inout_ STROBJ *pstro);
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 WNDOBJ_bEnum(
-  IN WNDOBJ  *pwo,
-  IN ULONG  cj,
-  OUT ULONG  *pul);
+    _Inout_ WNDOBJ *pwo,
+    _In_ ULONG cj,
+    _Out_bytecap_(cj) ULONG *pul);
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 WNDOBJ_cEnumStart(
-  IN WNDOBJ  *pwo,
-  IN ULONG  iType,
-  IN ULONG  iDirection,
-  IN ULONG  cLimit);
+    _Inout_ WNDOBJ *pwo,
+    _In_ ULONG iType,
+    _In_ ULONG iDirection,
+    _In_ ULONG cLimit);
 
-WIN32KAPI
+ENGAPI
 VOID
 APIENTRY
 WNDOBJ_vSetConsumer(
-  IN WNDOBJ  *pwo,
-  IN PVOID  pvConsumer);
+    _Inout_ WNDOBJ *pwo,
+    _In_ PVOID pvConsumer);
 
 /* XFORMOBJ_bApplyXform.iMode constants */
 #define XF_LTOL                           0L
@@ -2760,29 +3095,41 @@ WNDOBJ_vSetConsumer(
 #define XF_LTOFX                          2L
 #define XF_INV_FXTOL                      3L
 
-WIN32KAPI
+ENGAPI
 BOOL
 APIENTRY
 XFORMOBJ_bApplyXform(
-  IN XFORMOBJ  *pxo,
-  IN ULONG  iMode,
-  IN ULONG  cPoints,
-  IN PVOID  pvIn,
-  OUT PVOID  pvOut);
+    _In_ XFORMOBJ *pxo,
+    _In_ ULONG iMode,
+    _In_ ULONG cPoints,
+    _In_reads_bytes_(cPoints * sizeof(POINTL)) PVOID pvIn,
+    _Out_writes_bytes_(cPoints * sizeof(POINTL)) PVOID pvOut);
+
+/* Obsolete in Windows 2000 and later */
+DECLSPEC_DEPRECATED_DDK
+ENGAPI
+HANDLE
+APIENTRY
+XFORMOBJ_cmGetTransform(
+    XFORMOBJ *pxo);
 
-WIN32KAPI
+#if !defined(USERMODE_DRIVER)
+ENGAPI
 ULONG
 APIENTRY
 XFORMOBJ_iGetFloatObjXform(
-  IN XFORMOBJ  *pxo,
-  OUT FLOATOBJ_XFORM  *pxfo);
+    _In_ XFORMOBJ *pxo,
+    _Out_ FLOATOBJ_XFORM *pxfo);
+#else
+#define XFORMOBJ_iGetFloatObjXform XFORMOBJ_iGetXform
+#endif
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 XFORMOBJ_iGetXform(
-  IN XFORMOBJ  *pxo,
-  OUT XFORML  *pxform);
+    _In_ XFORMOBJ *pxo,
+    _Out_ XFORML *pxform);
 
 /* XLATEOBJ_cGetPalette.iPal constants */
 #define XO_SRCPALETTE                     1
@@ -2791,1369 +3138,1270 @@ XFORMOBJ_iGetXform(
 #define XO_SRCBITFIELDS                   4
 #define XO_DESTBITFIELDS                  5
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 XLATEOBJ_cGetPalette(
-  IN XLATEOBJ  *pxlo,
-  IN ULONG  iPal,
-  IN ULONG  cPal,
-  OUT ULONG  *pPal);
+    _In_ XLATEOBJ *pxlo,
+    _In_ ULONG iPal,
+    _In_ ULONG cPal,
+    _Out_cap_(cPal) ULONG *pPal);
 
-WIN32KAPI
+ENGAPI
 HANDLE
 APIENTRY
 XLATEOBJ_hGetColorTransform(
-  IN XLATEOBJ  *pxlo);
+    _In_ XLATEOBJ *pxlo);
 
-WIN32KAPI
+ENGAPI
 ULONG
 APIENTRY
 XLATEOBJ_iXlate(
-  IN XLATEOBJ  *pxlo,
-  IN ULONG  iColor);
+    _In_ XLATEOBJ *pxlo,
+    _In_ ULONG iColor);
 
-WIN32KAPI
+ENGAPI
 ULONG*
 APIENTRY
 XLATEOBJ_piVector(
-  IN XLATEOBJ  *pxlo);
-
-
-
-/* Graphics Driver Functions */
-
-BOOL
-APIENTRY
-DrvAlphaBlend(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN BLENDOBJ  *pBlendObj);
-
-BOOL
-APIENTRY
-DrvAssertMode(
-  IN DHPDEV  dhpdev,
-  IN BOOL  bEnable);
-
-BOOL
-APIENTRY
-DrvBitBlt(
-  IN SURFOBJ  *psoTrg,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclTrg,
-  IN POINTL  *pptlSrc,
-  IN POINTL  *pptlMask,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrush,
-  IN ROP4  rop4);
-
-VOID
-APIENTRY
-DrvCompletePDEV(
-  IN DHPDEV  dhpdev,
-  IN HDEV  hdev);
-
-BOOL
-APIENTRY
-DrvCopyBits(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN POINTL  *pptlSrc);
+    _In_ XLATEOBJ *pxlo);
 
-HBITMAP
-APIENTRY
-DrvCreateDeviceBitmap(
-  IN DHPDEV  dhpdev,
-  IN SIZEL  sizl,
-  IN ULONG  iFormat);
+#if (NTDDI_VERSION >= NTDDI_WINXPSP2)
 
+ENGAPI
 VOID
 APIENTRY
-DrvDeleteDeviceBitmap(
-  IN DHSURF  dhsurf);
-
-HBITMAP
-APIENTRY
-DrvDeriveSurface(
-  DD_DIRECTDRAW_GLOBAL  *pDirectDraw,
-  DD_SURFACE_LOCAL  *pSurface);
-
-LONG
-APIENTRY
-DrvDescribePixelFormat(
-  IN DHPDEV  dhpdev,
-  IN LONG  iPixelFormat,
-  IN ULONG  cjpfd,
-  OUT PIXELFORMATDESCRIPTOR  *ppfd);
+EngBugCheckEx(
+    _In_ ULONG BugCheckCode,
+    _In_ ULONG_PTR P1,
+    _In_ ULONG_PTR P2,
+    _In_ ULONG_PTR P3,
+    _In_ ULONG_PTR P4);
 
-VOID
-APIENTRY
-DrvDestroyFont(
-  IN FONTOBJ  *pfo);
+#endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
 
-VOID
-APIENTRY
-DrvDisableDriver(
-  VOID);
+#if (NTDDI_VERSION >= NTDDI_VISTA)
 
-VOID
+ENGAPI
+HANDLE
 APIENTRY
-DrvDisablePDEV(
-  IN DHPDEV  dhpdev);
+EngCreateRectRgn(
+    _In_ INT left,
+    _In_ INT top,
+    _In_ INT right,
+    _In_ INT bottom);
 
+ENGAPI
 VOID
 APIENTRY
-DrvDisableSurface(
-  IN DHPDEV  dhpdev);
+EngDeleteRgn(
+    _In_ HANDLE hrgn);
 
-#define DM_DEFAULT                        0x00000001
-#define DM_MONOCHROME                     0x00000002
-
-ULONG
-APIENTRY
-DrvDitherColor(
-  IN DHPDEV  dhpdev,
-  IN ULONG  iMode,
-  IN ULONG  rgb,
-  OUT ULONG  *pul);
-
-ULONG
-APIENTRY
-DrvDrawEscape(
-  IN SURFOBJ  *pso,
-  IN ULONG  iEsc,
-  IN CLIPOBJ  *pco,
-  IN RECTL  *prcl,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn);
-
-BOOL
-APIENTRY
-DrvEnableDriver(
-  IN ULONG  iEngineVersion,
-  IN ULONG  cj,
-  OUT DRVENABLEDATA  *pded);
-
-DHPDEV
-APIENTRY
-DrvEnablePDEV(
-  IN DEVMODEW  *pdm,
-  IN LPWSTR  pwszLogAddress,
-  IN ULONG  cPat,
-  OUT HSURF  *phsurfPatterns,
-  IN ULONG  cjCaps,
-  OUT ULONG  *pdevcaps,
-  IN ULONG  cjDevInfo,
-  OUT DEVINFO  *pdi,
-  IN HDEV  hdev,
-  IN LPWSTR  pwszDeviceName,
-  IN HANDLE  hDriver);
-
-HSURF
-APIENTRY
-DrvEnableSurface(
-  IN DHPDEV  dhpdev);
-
-/* DrvEndDoc.fl constants */
-#define ED_ABORTDOC                       0x00000001
-
-BOOL
-APIENTRY
-DrvEndDoc(
-  IN SURFOBJ  *pso,
-  IN FLONG  fl);
-
-ULONG
-APIENTRY
-DrvEscape(
-  IN SURFOBJ  *pso,
-  IN ULONG  iEsc,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn,
-  IN ULONG  cjOut,
-  OUT PVOID  pvOut);
-
-BOOL
+ENGAPI
+INT
 APIENTRY
-DrvFillPath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix,
-  IN FLONG  flOptions);
+EngCombineRgn(
+    _In_ HANDLE hrgnTrg,
+    _In_ HANDLE hrgnSrc1,
+    _In_ HANDLE hrgnSrc2,
+    _In_ INT iMode);
 
-ULONG
+ENGAPI
+INT
 APIENTRY
-DrvFontManagement(
-  IN SURFOBJ  *pso,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn,
-  IN ULONG  cjOut,
-  OUT PVOID  pvOut);
+EngCopyRgn(
+    _In_ HANDLE hrgnDst,
+    _In_ HANDLE hrgnSrc);
 
-VOID
+ENGAPI
+INT
 APIENTRY
-DrvFree(
-  IN PVOID  pv,
-  IN ULONG_PTR  id);
+EngIntersectRgn(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
 
-/* DrvGetGlyphMode return values */
-#define FO_HGLYPHS                        0L
-#define FO_GLYPHBITS                      1L
-#define FO_PATHOBJ                        2L
-
-ULONG
+ENGAPI
+INT
 APIENTRY
-DrvGetGlyphMode(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo);
+EngSubtractRgn(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
 
-ULONG
+ENGAPI
+INT
 APIENTRY
-DrvGetModes(
-  IN HANDLE  hDriver,
-  IN ULONG  cjSize,
-  OUT DEVMODEW  *pdm);
+EngUnionRgn(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
 
-PVOID
+ENGAPI
+INT
 APIENTRY
-DrvGetTrueTypeFile(
-  IN ULONG_PTR  iFile,
-  IN ULONG  *pcj);
+EngXorRgn(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
 
+ENGAPI
 BOOL
 APIENTRY
-DrvGradientFill(
-  IN SURFOBJ  *psoDest,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN TRIVERTEX  *pVertex,
-  IN ULONG  nVertex,
-  IN PVOID  pMesh,
-  IN ULONG  nMesh,
-  IN RECTL  *prclExtents,
-  IN POINTL  *pptlDitherOrg,
-  IN ULONG  ulMode);
+EngRectInRgn(
+    _In_ HANDLE hrgn,
+    _In_ LPRECT prcl);
 
+ENGAPI
 BOOL
 APIENTRY
-DrvIcmCheckBitmapBits(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hColorTransform,
-  IN SURFOBJ  *pso,
-  OUT PBYTE  paResults);
+EngEqualRgn(
+    _In_ HANDLE hrgn1,
+    _In_ HANDLE hrgn2);
 
-HANDLE
+ENGAPI
+DWORD
 APIENTRY
-DrvIcmCreateColorTransform(
-  IN DHPDEV  dhpdev,
-  IN LPLOGCOLORSPACEW  pLogColorSpace,
-  IN PVOID  pvSourceProfile,
-  IN ULONG  cjSourceProfile,
-  IN PVOID  pvDestProfile,
-  IN ULONG  cjDestProfile,
-  IN PVOID  pvTargetProfile,
-  IN ULONG  cjTargetProfile,
-  IN DWORD  dwReserved);
+EngGetRgnData(
+    _In_ HANDLE hrgn,
+    _In_ DWORD nCount,
+    _Out_cap_(nCount) LPRGNDATA lpRgnData);
 
+ENGAPI
 BOOL
 APIENTRY
-DrvIcmDeleteColorTransform(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hcmXform);
+EngSetRectRgn(
+    _In_ HANDLE hrgn,
+    _In_ INT left,
+    _In_ INT top,
+    _In_ INT right,
+    _In_ INT bottom);
 
-/* DrvIcmSetDeviceGammaRamp.iFormat constants */
-#define IGRF_RGB_256BYTES                 0x00000000
-#define IGRF_RGB_256WORDS                 0x00000001
-
-BOOL
+ENGAPI
+INT
 APIENTRY
-DrvIcmSetDeviceGammaRamp(
-  IN DHPDEV  dhpdev,
-  IN ULONG  iFormat,
-  IN LPVOID  lpRamp);
+EngGetRgnBox(
+    _In_ HANDLE hrgn,
+    _Out_ LPRECT prcl);
 
-BOOL
+ENGAPI
+INT
 APIENTRY
-DrvLineTo(
-  SURFOBJ  *pso,
-  CLIPOBJ  *pco,
-  BRUSHOBJ  *pbo,
-  LONG  x1,
-  LONG  y1,
-  LONG  x2,
-  LONG  y2,
-  RECTL  *prclBounds,
-  MIX  mix);
-
-ULONG_PTR
-APIENTRY
-DrvLoadFontFile(
-  ULONG  cFiles,
-  ULONG_PTR  *piFile,
-  PVOID  *ppvView,
-  ULONG  *pcjView,
-  DESIGNVECTOR  *pdv,
-  ULONG  ulLangID,
-  ULONG  ulFastCheckSum);
+EngOffsetRgn(
+    _In_ HANDLE hrgn,
+    _In_ INT x,
+    _In_ INT y);
 
+ENGAPI
 VOID
 APIENTRY
-DrvMovePointer(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl);
-
-BOOL
-APIENTRY
-DrvNextBand(
-  IN SURFOBJ  *pso,
-  IN POINTL  *pptl);
+EngRenderHint(
+    _In_ DHPDEV dhpdev,
+    _In_ ULONG NotifyCode,
+    _In_ SIZE_T Length,
+    _In_reads_bytes_opt_(Length) PVOID Data);
 
+ENGAPI
 VOID
 APIENTRY
-DrvNotify(
-  IN SURFOBJ  *pso,
-  IN ULONG  iType,
-  IN PVOID  pvData);
+EngAcquireSemaphoreShared(
+    _In_ HSEMAPHORE hsem);
 
+ENGAPI
 BOOL
 APIENTRY
-DrvOffset(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN FLONG  flReserved);
+EngAcquireSemaphoreNoWait(
+    _In_ HSEMAPHORE hsem);
 
+ENGAPI
 BOOL
 APIENTRY
-DrvPaint(
-  IN SURFOBJ  *pso,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix);
+EngAcquireSemaphoreSharedNoWait(
+    _In_ HSEMAPHORE hsem);
 
+ENGAPI
 BOOL
 APIENTRY
-DrvPlgBlt(
-  IN SURFOBJ  *psoTrg,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMsk,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlBrushOrg,
-  IN POINTFIX  *pptfx,
-  IN RECTL  *prcl,
-  IN POINTL  *pptl,
-  IN ULONG  iMode);
+EngIsSemaphoreSharedByCurrentThread(
+    _In_ HSEMAPHORE hsem);
 
-/* DrvQueryAdvanceWidths.iMode constants */
-#define QAW_GETWIDTHS                     0
-#define QAW_GETEASYWIDTHS                 1
+DECLARE_HANDLE(HFASTMUTEX);
 
-BOOL
-APIENTRY
-DrvQueryAdvanceWidths(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN HGLYPH  *phg,
-  OUT PVOID  pvWidths,
-  IN ULONG  cGlyphs);
-
-/* DrvQueryDeviceSupport.iType constants */
-#define QDS_CHECKJPEGFORMAT               0x00000000
-#define QDS_CHECKPNGFORMAT                0x00000001
-
-BOOL
-APIENTRY
-DrvQueryDeviceSupport(
-  SURFOBJ  *pso,
-  XLATEOBJ  *pxlo,
-  XFORMOBJ  *pxo,
-  ULONG  iType,
-  ULONG  cjIn,
-  PVOID  pvIn,
-  ULONG  cjOut,
-  PVOID  pvOut);
-
-/* DrvQueryDriverInfo.dwMode constants */
-#define DRVQUERY_USERMODE                 0x00000001
-
-BOOL
-APIENTRY
-DrvQueryDriverInfo(
-  DWORD  dwMode,
-  PVOID  pBuffer,
-  DWORD  cbBuf,
-  PDWORD  pcbNeeded);
-
-PIFIMETRICS
-APIENTRY
-DrvQueryFont(
-  IN DHPDEV  dhpdev,
-  IN ULONG_PTR  iFile,
-  IN ULONG  iFace,
-  IN ULONG_PTR  *pid);
-
-/* DrvQueryFontCaps.pulCaps constants */
-#define QC_OUTLINES                       0x00000001
-#define QC_1BIT                           0x00000002
-#define QC_4BIT                           0x00000004
-
-#define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
-
-LONG
-APIENTRY
-DrvQueryFontCaps(
-  IN ULONG  culCaps,
-  OUT ULONG  *pulCaps);
-
-/* DrvQueryFontData.iMode constants */
-#define QFD_GLYPHANDBITMAP                1L
-#define QFD_GLYPHANDOUTLINE               2L
-#define QFD_MAXEXTENTS                    3L
-#define QFD_TT_GLYPHANDBITMAP             4L
-#define QFD_TT_GRAY1_BITMAP               5L
-#define QFD_TT_GRAY2_BITMAP               6L
-#define QFD_TT_GRAY4_BITMAP               8L
-#define QFD_TT_GRAY8_BITMAP               9L
-
-#define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
-
-LONG
-APIENTRY
-DrvQueryFontData(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN HGLYPH  hg,
-  IN OUT GLYPHDATA  *pgd,
-  IN OUT PVOID  pv,
-  IN ULONG  cjSize);
-
-/* DrvQueryFontFile.ulMode constants */
-#define QFF_DESCRIPTION                   0x00000001
-#define QFF_NUMFACES                      0x00000002
-
-LONG
+ENGAPI
+HFASTMUTEX
 APIENTRY
-DrvQueryFontFile(
-  IN ULONG_PTR  iFile,
-  IN ULONG  ulMode,
-  IN ULONG  cjBuf,
-  IN ULONG  *pulBuf);
-
-/* DrvQueryFontTree.iMode constants */
-#define QFT_UNICODE                       0L
-#define QFT_LIGATURES                     1L
-#define QFT_KERNPAIRS                     2L
-#define QFT_GLYPHSET                      3L
+EngCreateFastMutex(
+    VOID);
 
-PVOID
-APIENTRY
-DrvQueryFontTree(
-  IN DHPDEV  dhpdev,
-  IN ULONG_PTR  iFile,
-  IN ULONG  iFace,
-  IN ULONG  iMode,
-  IN ULONG_PTR  *pid);
-
-PFD_GLYPHATTR
-APIENTRY
-DrvQueryGlyphAttrs(
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode);
-
-ULONG
-APIENTRY
-DrvQueryPerBandInfo(
-  IN SURFOBJ  *pso,
-  IN OUT PERBANDINFO  *pbi);
-
-/* DrvQueryTrueTypeOutline.bMetricsOnly constants */
-#define TTO_METRICS_ONLY                  0x00000001
-#define TTO_QUBICS                        0x00000002
-#define TTO_UNHINTED                      0x00000004
-
-LONG
-APIENTRY
-DrvQueryTrueTypeOutline(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN HGLYPH  hglyph,
-  IN BOOL  bMetricsOnly,
-  IN GLYPHDATA  *pgldt,
-  IN ULONG  cjBuf,
-  OUT TTPOLYGONHEADER  *ppoly);
-
-LONG
-APIENTRY
-DrvQueryTrueTypeTable(
-  IN ULONG_PTR  iFile,
-  IN ULONG  ulFont,
-  IN ULONG  ulTag,
-  IN PTRDIFF  dpStart,
-  IN ULONG  cjBuf,
-  OUT BYTE  *pjBuf,
-  OUT PBYTE  *ppjTable,
-  OUT ULONG *pcjTable);
-
-/* DrvRealizeBrush.iHatch constants */
-#define RB_DITHERCOLOR                    0x80000000L
-
-#define HS_DDI_MAX                        6
-
-BOOL
-APIENTRY
-DrvRealizeBrush(
-  IN BRUSHOBJ  *pbo,
-  IN SURFOBJ  *psoTarget,
-  IN SURFOBJ  *psoPattern,
-  IN SURFOBJ  *psoMask,
-  IN XLATEOBJ  *pxlo,
-  IN ULONG  iHatch);
-
-/* DrvResetDevice return values */
-#define DRD_SUCCESS                       0
-#define DRD_ERROR                         1
-
-ULONG
-APIENTRY
-DrvResetDevice(
-  IN DHPDEV dhpdev,
-  IN PVOID Reserved);
-
-BOOL
-APIENTRY
-DrvResetPDEV(
-  DHPDEV  dhpdevOld,
-  DHPDEV  dhpdevNew);
-
-/* DrvSaveScreenBits.iMode constants */
-#define SS_SAVE                           0x00000000
-#define SS_RESTORE                        0x00000001
-#define SS_FREE                           0x00000002
-
-ULONG_PTR
-APIENTRY
-DrvSaveScreenBits(
-  IN SURFOBJ  *pso,
-  IN ULONG  iMode,
-  IN ULONG_PTR  ident,
-  IN RECTL  *prcl);
-
-BOOL
-APIENTRY
-DrvSendPage(
-  IN SURFOBJ  *pso);
-
-BOOL
-APIENTRY
-DrvSetPalette(
-  IN DHPDEV  dhpdev,
-  IN PALOBJ  *ppalo,
-  IN FLONG  fl,
-  IN ULONG  iStart,
-  IN ULONG  cColors);
-
-BOOL
-APIENTRY
-DrvSetPixelFormat(
-  IN SURFOBJ  *pso,
-  IN LONG  iPixelFormat,
-  IN HWND  hwnd);
-
-/* DrvSetPointerShape return values */
-#define SPS_ERROR                         0x00000000
-#define SPS_DECLINE                       0x00000001
-#define SPS_ACCEPT_NOEXCLUDE              0x00000002
-#define SPS_ACCEPT_EXCLUDE                0x00000003
-#define SPS_ACCEPT_SYNCHRONOUS            0x00000004
-
-/* DrvSetPointerShape.fl constants */
-#define SPS_CHANGE                        0x00000001L
-#define SPS_ASYNCCHANGE                   0x00000002L
-#define SPS_ANIMATESTART                  0x00000004L
-#define SPS_ANIMATEUPDATE                 0x00000008L
-#define SPS_ALPHA                         0x00000010L
-#define SPS_LENGTHMASK                    0x00000F00L
-#define SPS_FREQMASK                      0x000FF000L
-
-ULONG
-APIENTRY
-DrvSetPointerShape(
-  IN SURFOBJ  *pso,
-  IN SURFOBJ  *psoMask,
-  IN SURFOBJ  *psoColor,
-  IN XLATEOBJ  *pxlo,
-  IN LONG  xHot,
-  IN LONG  yHot,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl,
-  IN FLONG  fl);
-
-BOOL
-APIENTRY
-DrvStartBanding(
-  IN SURFOBJ  *pso,
-  IN POINTL  *pptl);
-
-BOOL
-APIENTRY
-DrvStartDoc(
-  IN SURFOBJ  *pso,
-  IN LPWSTR  pwszDocName,
-  IN DWORD  dwJobId);
-
-BOOL
+ENGAPI
+VOID
 APIENTRY
-DrvStartPage(
-  IN SURFOBJ  *pso);
+EngDeleteFastMutex(
+    _In_ HFASTMUTEX hfm);
 
-BOOL
+ENGAPI
+VOID
 APIENTRY
-DrvStretchBlt(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlHTOrg,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN POINTL  *pptlMask,
-  IN ULONG  iMode);
+EngAcquireFastMutex(
+    _In_ HFASTMUTEX hfm);
 
-BOOL
+ENGAPI
+VOID
 APIENTRY
-DrvStretchBltROP(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlHTOrg,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN POINTL  *pptlMask,
-  IN ULONG  iMode,
-  IN BRUSHOBJ  *pbo,
-  IN DWORD  rop4);
+EngReleaseFastMutex(
+    _In_ HFASTMUTEX hfm);
 
+ENGAPI
 BOOL
 APIENTRY
-DrvStrokeAndFillPath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN XFORMOBJ  *pxo,
-  IN BRUSHOBJ  *pboStroke,
-  IN LINEATTRS  *plineattrs,
-  IN BRUSHOBJ  *pboFill,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mixFill,
-  IN FLONG  flOptions);
+EngUpdateDeviceSurface(
+    _In_ SURFOBJ *pso,
+    _Inout_ CLIPOBJ **ppco);
 
-BOOL
-APIENTRY
-DrvStrokePath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN XFORMOBJ  *pxo,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN LINEATTRS  *plineattrs,
-  IN MIX  mix);
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
 
-BOOL
-APIENTRY
-DrvSwapBuffers(
-  IN SURFOBJ  *pso,
-  IN WNDOBJ  *pwo);
+#if (NTDDI_VERSION >= NTDDI_WIN7)
 
-VOID
+ENGAPI
+HBITMAP
 APIENTRY
-DrvSynchronize(
-  IN DHPDEV  dhpdev,
-  IN RECTL  *prcl);
-
-/* DrvSynchronizeSurface.fl constants */
-#define DSS_TIMER_EVENT                   0x00000001
-#define DSS_FLUSH_EVENT                   0x00000002
+EngCreateRedirectionDeviceBitmap(
+    __in_data_source(USER_MODE) DHSURF dhsurf,
+    __in_data_source(USER_MODE) SIZEL sizl,
+    _In_ ULONG iFormatCompat);
 
 VOID
 APIENTRY
-DrvSynchronizeSurface(
-  IN SURFOBJ  *pso,
-  IN RECTL  *prcl,
-  IN FLONG  fl);
+EngCTGetGammaTable(
+    _In_ ULONG ulGamma,
+    _Out_ CONST BYTE** pGammaTable,
+    _Out_ CONST BYTE** pInverseGammaTable);
 
-BOOL
+ULONG
 APIENTRY
-DrvTextOut(
-  IN SURFOBJ  *pso,
-  IN STROBJ  *pstro,
-  IN FONTOBJ  *pfo,
-  IN CLIPOBJ  *pco,
-  IN RECTL  *prclExtra,
-  IN RECTL  *prclOpaque,
-  IN BRUSHOBJ  *pboFore,
-  IN BRUSHOBJ  *pboOpaque,
-  IN POINTL  *pptlOrg,
-  IN MIX  mix);
+EngCTGetCurrentGamma(
+    _In_ HDEV hdev);
 
-BOOL
-APIENTRY
-DrvTransparentBlt(
-  IN SURFOBJ  *psoDst,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDst,
-  IN RECTL  *prclSrc,
-  IN ULONG  iTransColor,
-  IN ULONG  ulReserved);
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
-BOOL
-APIENTRY
-DrvUnloadFontFile(
-  IN ULONG_PTR  iFile);
+/* Graphics Driver Functions */
 
 typedef BOOL
-(APIENTRY *PFN_DrvAlphaBlend)(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN BLENDOBJ  *pBlendObj);
+(APIENTRY FN_DrvAlphaBlend)(
+    _Inout_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _In_ BLENDOBJ *pBlendObj);
+typedef FN_DrvAlphaBlend *PFN_DrvAlphaBlend;
+extern FN_DrvAlphaBlend DrvAlphaBlend;
 
 typedef BOOL
-(APIENTRY *PFN_DrvAssertMode)(
-  IN DHPDEV  dhpdev,
-  IN BOOL  bEnable);
+(APIENTRY FN_DrvAssertMode)(
+    _In_ DHPDEV dhpdev,
+    _In_ BOOL bEnable);
+typedef FN_DrvAssertMode *PFN_DrvAssertMode;
+extern FN_DrvAssertMode DrvAssertMode;
 
 typedef BOOL
-(APIENTRY *PFN_DrvBitBlt)(
-  IN SURFOBJ  *psoTrg,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclTrg,
-  IN POINTL  *pptlSrc,
-  IN POINTL  *pptlMask,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrush,
-  IN ROP4  rop4);
+(APIENTRY FN_DrvBitBlt)(
+    _Inout_ SURFOBJ *psoTrg,
+    _In_opt_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclTrg,
+    _In_opt_ POINTL *pptlSrc,
+    _In_opt_ POINTL *pptlMask,
+    _In_opt_ BRUSHOBJ *pbo,
+    _In_opt_ POINTL *pptlBrush,
+    _In_ ROP4 rop4);
+typedef FN_DrvBitBlt *PFN_DrvBitBlt;
+extern FN_DrvBitBlt DrvBitBlt;
 
 typedef VOID
-(APIENTRY *PFN_DrvCompletePDEV)(
-  IN DHPDEV  dhpdev,
-  IN HDEV  hdev);
+(APIENTRY FN_DrvCompletePDEV)(
+    _In_ DHPDEV dhpdev,
+    _In_ HDEV hdev);
+typedef FN_DrvCompletePDEV *PFN_DrvCompletePDEV;
+extern FN_DrvCompletePDEV DrvCompletePDEV;
 
 typedef BOOL
-(APIENTRY *PFN_DrvCopyBits)(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN POINTL  *pptlSrc);
+(APIENTRY FN_DrvCopyBits)(
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDest,
+    _In_ POINTL *pptlSrc);
+typedef FN_DrvCopyBits *PFN_DrvCopyBits;
+extern FN_DrvCopyBits DrvCopyBits;
 
 typedef HBITMAP
-(APIENTRY *PFN_DrvCreateDeviceBitmap)(
-  IN DHPDEV  dhpdev,
-  IN SIZEL  sizl,
-  IN ULONG  iFormat);
+(APIENTRY FN_DrvCreateDeviceBitmap)(
+    _In_ DHPDEV  dhpdev,
+    _In_ SIZEL  sizl,
+    _In_ ULONG  iFormat);
+typedef FN_DrvCreateDeviceBitmap *PFN_DrvCreateDeviceBitmap;
+extern FN_DrvCreateDeviceBitmap DrvCreateDeviceBitmap;
 
 typedef VOID
-(APIENTRY *PFN_DrvDeleteDeviceBitmap)(
-  IN DHSURF  dhsurf);
+(APIENTRY FN_DrvDeleteDeviceBitmap)(
+    _In_ _Post_ptr_invalid_ DHSURF dhsurf);
+typedef FN_DrvDeleteDeviceBitmap *PFN_DrvDeleteDeviceBitmap;
+extern FN_DrvDeleteDeviceBitmap DrvDeleteDeviceBitmap;
 
 typedef HBITMAP
-(APIENTRY *PFN_DrvDeriveSurface)(
-  DD_DIRECTDRAW_GLOBAL  *pDirectDraw,
-  DD_SURFACE_LOCAL  *pSurface);
+(APIENTRY FN_DrvDeriveSurface)(
+    _In_ DD_DIRECTDRAW_GLOBAL *pDirectDraw,
+    _In_ DD_SURFACE_LOCAL *pSurface);
+typedef FN_DrvDeriveSurface *PFN_DrvDeriveSurface;
+extern FN_DrvDeriveSurface DrvDeriveSurface;
 
 typedef LONG
-(APIENTRY *PFN_DrvDescribePixelFormat)(
-  IN DHPDEV  dhpdev,
-  IN LONG  iPixelFormat,
-  IN ULONG  cjpfd,
-  OUT PIXELFORMATDESCRIPTOR  *ppfd);
+(APIENTRY FN_DrvDescribePixelFormat)(
+    _In_ DHPDEV dhpdev,
+    _In_ LONG iPixelFormat,
+    _In_ ULONG cjpfd,
+    _Out_opt_ PIXELFORMATDESCRIPTOR *ppfd);
+typedef FN_DrvDescribePixelFormat *PFN_DrvDescribePixelFormat;
+extern FN_DrvDescribePixelFormat DrvDescribePixelFormat;
 
 typedef VOID
-(APIENTRY *PFN_DrvDestroyFont)(
-  IN FONTOBJ  *pfo);
+(APIENTRY FN_DrvDestroyFont)(
+    _In_ FONTOBJ *pfo);
+typedef FN_DrvDestroyFont *PFN_DrvDestroyFont;
+extern FN_DrvDestroyFont DrvDestroyFont;
 
 typedef VOID
-(APIENTRY *PFN_DrvDisableDriver)(
-  VOID);
+(APIENTRY FN_DrvDisableDriver)(VOID);
+typedef FN_DrvDisableDriver *PFN_DrvDisableDriver;
+extern FN_DrvDisableDriver DrvDisableDriver;
 
 typedef VOID
-(APIENTRY *PFN_DrvDisablePDEV)(
-  IN DHPDEV  dhpdev);
+(APIENTRY FN_DrvDisablePDEV)(
+    _In_ DHPDEV dhpdev);
+typedef FN_DrvDisablePDEV *PFN_DrvDisablePDEV;
+extern FN_DrvDisablePDEV DrvDisablePDEV;
 
 typedef VOID
-(APIENTRY *PFN_DrvDisableSurface)(
-  IN DHPDEV  dhpdev);
+(APIENTRY FN_DrvDisableSurface)(
+    _In_ DHPDEV dhpdev);
+typedef FN_DrvDisableSurface *PFN_DrvDisableSurface;
+extern FN_DrvDisableSurface DrvDisableSurface;
 
 typedef ULONG
-(APIENTRY *PFN_DrvDitherColor)(
-  IN DHPDEV  dhpdev,
-  IN ULONG  iMode,
-  IN ULONG  rgb,
-  OUT ULONG  *pul);
+(APIENTRY FN_DrvDitherColor)(
+    _In_ DHPDEV dhpdev,
+    _In_ ULONG iMode,
+    _In_ ULONG rgb,
+    _Inout_updates_(8 * 8) ULONG *pul); // FIXME: compare EngDitherColor
+typedef FN_DrvDitherColor *PFN_DrvDitherColor;
+extern FN_DrvDitherColor DrvDitherColor;
 
 typedef ULONG
-(APIENTRY *PFN_DrvDrawEscape)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iEsc,
-  IN CLIPOBJ  *pco,
-  IN RECTL  *prcl,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn);
+(APIENTRY FN_DrvDrawEscape)(
+    _In_ SURFOBJ *pso,
+    _In_ ULONG iEsc,
+    _In_ CLIPOBJ *pco,
+    _In_ RECTL *prcl,
+    _In_ ULONG cjIn,
+    _In_reads_bytes_(cjIn) PVOID pvIn);
+typedef FN_DrvDrawEscape *PFN_DrvDrawEscape;
+extern FN_DrvDrawEscape DrvDrawEscape;
 
 typedef BOOL
-(APIENTRY *PFN_DrvEnableDriver)(
-  IN ULONG  iEngineVersion,
-  IN ULONG  cj,
-  OUT DRVENABLEDATA  *pded);
-
-typedef DHPDEV 
-(APIENTRY *PFN_DrvEnablePDEV)(
-  IN DEVMODEW  *pdm,
-  IN LPWSTR  pwszLogAddress,
-  IN ULONG  cPat,
-  OUT HSURF  *phsurfPatterns,
-  IN ULONG  cjCaps,
-  GDIINFO  *pdevcaps,
-  IN ULONG  cjDevInfo,
-  OUT DEVINFO  *pdi,
-  IN HDEV  hdev,
-  IN LPWSTR  pwszDeviceName,
-  IN HANDLE  hDriver);
+(APIENTRY FN_DrvEnableDriver)(
+    _In_ ULONG iEngineVersion,
+    _In_ ULONG cj,
+    _Inout_bytecount_(cj) DRVENABLEDATA *pded); // Zero initialized
+typedef FN_DrvEnableDriver *PFN_DrvEnableDriver;
+extern FN_DrvEnableDriver DrvEnableDriver;
+
+typedef DHPDEV
+(APIENTRY FN_DrvEnablePDEV)(
+    _In_ DEVMODEW *pdm,
+    _In_ LPWSTR pwszLogAddress,
+    _In_ ULONG cPat,
+    _Out_opt_cap_(cPat) HSURF *phsurfPatterns,
+    _In_ ULONG cjCaps,
+    _Out_bytecap_(cjCaps) ULONG *pdevcaps,
+    _In_ ULONG cjDevInfo,
+    _Out_ DEVINFO *pdi,
+    _In_ HDEV hdev,
+    _In_ LPWSTR pwszDeviceName,
+    _In_ HANDLE hDriver);
+typedef FN_DrvEnablePDEV *PFN_DrvEnablePDEV;
+extern FN_DrvEnablePDEV DrvEnablePDEV;
 
 typedef HSURF
-(APIENTRY *PFN_DrvEnableSurface)(
-  IN DHPDEV  dhpdev);
+(APIENTRY FN_DrvEnableSurface)(
+    _In_ DHPDEV dhpdev);
+typedef FN_DrvEnableSurface *PFN_DrvEnableSurface;
+extern FN_DrvEnableSurface DrvEnableSurface;
+
+/* DrvEndDoc.fl constants */
+#define ED_ABORTDOC                       0x00000001
 
 typedef BOOL
-(APIENTRY *PFN_DrvEndDoc)(
-  IN SURFOBJ  *pso,
-  IN FLONG  fl);
+(APIENTRY FN_DrvEndDoc)(
+    _In_ SURFOBJ *pso,
+    _In_ FLONG fl);
+typedef FN_DrvEndDoc *PFN_DrvEndDoc;
+extern FN_DrvEndDoc DrvEndDoc;
 
 typedef ULONG
-(APIENTRY *PFN_DrvEscape)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iEsc,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn,
-  IN ULONG  cjOut,
-  OUT PVOID  pvOut);
+(APIENTRY FN_DrvEscape)(
+    _In_ SURFOBJ *pso,
+    _In_ ULONG iEsc,
+    _In_ ULONG cjIn,
+    _In_bytecount_(cjIn) PVOID pvIn,
+    _In_ ULONG cjOut,
+    _Out_bytecap_(cjOut) PVOID pvOut);
+typedef FN_DrvEscape *PFN_DrvEscape;
+extern FN_DrvEscape DrvEscape;
 
 typedef BOOL
-(APIENTRY *PFN_DrvFillPath)(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix,
-  IN FLONG  flOptions);
+(APIENTRY FN_DrvFillPath)(
+    _Inout_ SURFOBJ *pso,
+    _In_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_ BRUSHOBJ *pbo,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ MIX mix,
+    _In_ FLONG flOptions);
+typedef FN_DrvFillPath *PFN_DrvFillPath;
+extern FN_DrvFillPath DrvFillPath;
 
 typedef ULONG
-(APIENTRY *PFN_DrvFontManagement)(
-  IN SURFOBJ  *pso,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn,
-  IN ULONG  cjOut,
-  OUT PVOID  pvOut);
+(APIENTRY FN_DrvFontManagement)(
+    _In_ SURFOBJ  *pso,
+    _In_opt_ FONTOBJ  *pfo,
+    _In_ ULONG  iMode,
+    _In_ ULONG  cjIn,
+    _In_bytecount_(cjIn) PVOID  pvIn,
+    _In_ ULONG  cjOut,
+    _Out_bytecap_(cjOut) PVOID  pvOut);
+typedef FN_DrvFontManagement *PFN_DrvFontManagement;
+extern FN_DrvFontManagement DrvFontManagement;
 
 typedef VOID
-(APIENTRY *PFN_DrvFree)(
-  IN PVOID  pv,
-  IN ULONG_PTR  id);
+(APIENTRY FN_DrvFree)(
+    _In_ _Post_ptr_invalid_ PVOID pv,
+    _In_ ULONG_PTR id);
+typedef FN_DrvFree *PFN_DrvFree;
+extern FN_DrvFree DrvFree;
+
+/* DrvGetGlyphMode return values */
+#define FO_HGLYPHS                        0L
+#define FO_GLYPHBITS                      1L
+#define FO_PATHOBJ                        2L
 
 typedef ULONG
-(APIENTRY *PFN_DrvGetGlyphMode)(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo);
+(APIENTRY FN_DrvGetGlyphMode)(
+    _In_ DHPDEV dhpdev,
+    _In_ FONTOBJ *pfo);
+typedef FN_DrvGetGlyphMode *PFN_DrvGetGlyphMode;
+extern FN_DrvGetGlyphMode DrvGetGlyphMode;
 
 typedef ULONG
-(APIENTRY *PFN_DrvGetModes)(
-  IN HANDLE  hDriver,
-  IN ULONG  cjSize,
-  OUT DEVMODEW  *pdm);
+(APIENTRY FN_DrvGetModes)(
+    _In_ HANDLE hDriver,
+    _In_ ULONG cjSize,
+    _Out_opt_bytecap_(cjSize) DEVMODEW *pdm);
+typedef FN_DrvGetModes *PFN_DrvGetModes;
+extern FN_DrvGetModes DrvGetModes;
 
 typedef PVOID
-(APIENTRY *PFN_DrvGetTrueTypeFile)(
-  IN ULONG_PTR  iFile,
-  IN ULONG  *pcj);
+(APIENTRY FN_DrvGetTrueTypeFile)(
+    _In_ ULONG_PTR iFile,
+    _In_ ULONG *pcj);
+typedef FN_DrvGetTrueTypeFile *PFN_DrvGetTrueTypeFile;
+extern FN_DrvGetTrueTypeFile DrvGetTrueTypeFile;
 
 typedef BOOL
-(APIENTRY *PFN_DrvGradientFill)(
-  IN SURFOBJ  *psoDest,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN TRIVERTEX  *pVertex,
-  IN ULONG  nVertex,
-  IN PVOID  pMesh,
-  IN ULONG  nMesh,
-  IN RECTL  *prclExtents,
-  IN POINTL  *pptlDitherOrg,
-  IN ULONG  ulMode);
+(APIENTRY FN_DrvGradientFill)(
+    _Inout_ SURFOBJ *psoDest,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ TRIVERTEX *pVertex,
+    _In_ ULONG nVertex,
+    _In_ PVOID pMesh,
+    _In_ ULONG nMesh,
+    _In_ RECTL *prclExtents,
+    _In_ POINTL *pptlDitherOrg,
+    _In_ ULONG ulMode);
+typedef FN_DrvGradientFill *PFN_DrvGradientFill;
+extern FN_DrvGradientFill DrvGradientFill;
 
 typedef BOOL
-(APIENTRY *PFN_DrvIcmCheckBitmapBits)(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hColorTransform,
-  IN SURFOBJ  *pso,
-  OUT PBYTE  paResults);
+(APIENTRY FN_DrvIcmCheckBitmapBits)(
+    _In_ DHPDEV dhpdev,
+    _In_ HANDLE hColorTransform,
+    _In_ SURFOBJ *pso,
+    _Out_bytecap_(pso->sizlBitmap.cx * pso->sizlBitmap.cy) PBYTE paResults);
+typedef FN_DrvIcmCheckBitmapBits *PFN_DrvIcmCheckBitmapBits;
+extern FN_DrvIcmCheckBitmapBits DrvIcmCheckBitmapBits;
 
 typedef HANDLE
-(APIENTRY *PFN_DrvIcmCreateColorTransform)(
-  IN DHPDEV  dhpdev,
-  IN LPLOGCOLORSPACEW  pLogColorSpace,
-  IN PVOID  pvSourceProfile,
-  IN ULONG  cjSourceProfile,
-  IN PVOID  pvDestProfile,
-  IN ULONG  cjDestProfile,
-  IN PVOID  pvTargetProfile,
-  IN ULONG  cjTargetProfile,
-  IN DWORD  dwReserved);
+(APIENTRY FN_DrvIcmCreateColorTransform)(
+    _In_ DHPDEV dhpdev,
+    _In_ LPLOGCOLORSPACEW pLogColorSpace,
+    _In_reads_bytes_opt_(cjSourceProfile) PVOID pvSourceProfile,
+    _In_ ULONG cjSourceProfile,
+    _In_reads_bytes_(cjDestProfile) PVOID pvDestProfile,
+    _In_ ULONG cjDestProfile,
+    _In_reads_bytes_opt_(cjTargetProfile) PVOID pvTargetProfile,
+    _In_ ULONG cjTargetProfile,
+    _In_ DWORD dwReserved);
+typedef FN_DrvIcmCreateColorTransform *PFN_DrvIcmCreateColorTransform;
+extern FN_DrvIcmCreateColorTransform DrvIcmCreateColorTransform;
 
 typedef BOOL
-(APIENTRY *PFN_DrvIcmDeleteColorTransform)(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hcmXform);
+(APIENTRY FN_DrvIcmDeleteColorTransform)(
+    _In_ DHPDEV dhpdev,
+    _In_ HANDLE hcmXform);
+typedef FN_DrvIcmDeleteColorTransform *PFN_DrvIcmDeleteColorTransform;
+extern FN_DrvIcmDeleteColorTransform DrvIcmDeleteColorTransform;
+
+/* DrvIcmSetDeviceGammaRamp.iFormat constants */
+#define IGRF_RGB_256BYTES                 0x00000000
+#define IGRF_RGB_256WORDS                 0x00000001
 
 typedef BOOL
-(APIENTRY *PFN_DrvIcmSetDeviceGammaRamp)(
-  IN DHPDEV  dhpdev,
-  IN ULONG  iFormat,
-  IN LPVOID  lpRamp);
+(APIENTRY FN_DrvIcmSetDeviceGammaRamp)(
+    _In_ DHPDEV dhpdev,
+    _In_ ULONG iFormat,
+    _In_bytecount_(sizeof(GAMMARAMP)) LPVOID lpRamp);
+typedef FN_DrvIcmSetDeviceGammaRamp *PFN_DrvIcmSetDeviceGammaRamp;
+extern FN_DrvIcmSetDeviceGammaRamp DrvIcmSetDeviceGammaRamp;
 
 typedef BOOL
-(APIENTRY *PFN_DrvLineTo)(
-  SURFOBJ  *pso,
-  CLIPOBJ  *pco,
-  BRUSHOBJ  *pbo,
-  LONG  x1,
-  LONG  y1,
-  LONG  x2,
-  LONG  y2,
-  RECTL  *prclBounds,
-  MIX  mix);
+(APIENTRY FN_DrvLineTo)(
+    _Inout_ SURFOBJ *pso,
+    _In_ CLIPOBJ *pco,
+    _In_ BRUSHOBJ *pbo,
+    _In_ LONG x1,
+    _In_ LONG y1,
+    _In_ LONG x2,
+    _In_ LONG y2,
+    _In_opt_ RECTL *prclBounds,
+    _In_ MIX mix);
+typedef FN_DrvLineTo *PFN_DrvLineTo;
+extern FN_DrvLineTo DrvLineTo;
 
 typedef ULONG_PTR
-(APIENTRY *PFN_DrvLoadFontFile)(
-  ULONG  cFiles,
-  ULONG_PTR  *piFile,
-  PVOID  *ppvView,
-  ULONG  *pcjView,
-  DESIGNVECTOR  *pdv,
-  ULONG  ulLangID,
-  ULONG  ulFastCheckSum);
+(APIENTRY FN_DrvLoadFontFile)(
+    _In_ ULONG cFiles,
+    _In_ ULONG_PTR *piFile,
+    _In_count_(cFiles) PVOID *ppvView,
+    _In_count_(cFiles) ULONG *pcjView,
+    _In_opt_ DESIGNVECTOR *pdv,
+    _In_ ULONG ulLangID,
+    _In_ ULONG ulFastCheckSum);
+typedef FN_DrvLoadFontFile *PFN_DrvLoadFontFile;
+extern FN_DrvLoadFontFile DrvLoadFontFile;
 
 typedef VOID
-(APIENTRY *PFN_DrvMovePointer)(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl);
+(APIENTRY FN_DrvMovePointer)(
+    _In_ SURFOBJ *pso,
+    _In_ LONG x,
+    _In_ LONG y,
+    _In_opt_ RECTL *prcl);
+typedef FN_DrvMovePointer *PFN_DrvMovePointer;
+extern FN_DrvMovePointer DrvMovePointer;
 
 typedef BOOL
-(APIENTRY *PFN_DrvNextBand)(
-  IN SURFOBJ  *pso,
-  IN POINTL  *pptl);
+(APIENTRY FN_DrvNextBand)(
+    _In_ SURFOBJ *pso,
+    _In_ POINTL *pptl);
+typedef FN_DrvNextBand *PFN_DrvNextBand;
+extern FN_DrvNextBand DrvNextBand;
 
 typedef VOID
-(APIENTRY *PFN_DrvNotify)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iType,
-  IN PVOID  pvData);
+(APIENTRY FN_DrvNotify)(
+    _In_ SURFOBJ *pso,
+    _In_ ULONG iType,
+    _In_opt_ PVOID pvData);
+typedef FN_DrvNotify *PFN_DrvNotify;
+extern FN_DrvNotify DrvNotify;
 
 typedef BOOL
-(APIENTRY *PFN_DrvOffset)(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN FLONG  flReserved);
+(APIENTRY FN_DrvOffset)(
+    _In_ SURFOBJ *pso,
+    _In_ LONG x,
+    _In_ LONG y,
+    _In_ FLONG flReserved);
+typedef FN_DrvOffset *PFN_DrvOffset;
+extern FN_DrvOffset DrvOffset;
 
 typedef BOOL
-(APIENTRY *PFN_DrvPaint)(
-  IN SURFOBJ  *pso,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix);
+(APIENTRY FN_DrvPaint)(
+    _Inout_ SURFOBJ *pso,
+    _In_ CLIPOBJ *pco,
+    _In_ BRUSHOBJ *pbo,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ MIX mix);
+typedef FN_DrvPaint *PFN_DrvPaint;
+extern FN_DrvPaint DrvPaint;
 
 typedef BOOL
-(APIENTRY *PFN_DrvPlgBlt)(
-  IN SURFOBJ  *psoTrg,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMsk,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlBrushOrg,
-  IN POINTFIX  *pptfx,
-  IN RECTL  *prcl,
-  IN POINTL  *pptl,
-  IN ULONG  iMode);
+(APIENTRY FN_DrvPlgBlt)(
+    _Inout_ SURFOBJ *psoTrg,
+    _Inout_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMsk,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_opt_ COLORADJUSTMENT *pca,
+    _In_opt_ POINTL *pptlBrushOrg,
+    _In_ POINTFIX *pptfx,
+    _In_ RECTL *prcl,
+    _In_opt_ POINTL *pptl,
+    _In_ ULONG iMode);
+typedef FN_DrvPlgBlt *PFN_DrvPlgBlt;
+extern FN_DrvPlgBlt DrvPlgBlt;
+
+/* DrvQueryAdvanceWidths.iMode constants */
+#define QAW_GETWIDTHS                     0
+#define QAW_GETEASYWIDTHS                 1
 
 typedef BOOL
-(APIENTRY *PFN_DrvQueryAdvanceWidths)(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN HGLYPH  *phg,
-  OUT PVOID  pvWidths,
-  IN ULONG  cGlyphs);
+(APIENTRY FN_DrvQueryAdvanceWidths)(
+    _In_ DHPDEV dhpdev,
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode,
+    _In_reads_(cGlyphs) HGLYPH *phg,
+    _Out_writes_bytes_(cGlyphs * sizeof(USHORT)) PVOID pvWidths,
+    _In_ ULONG cGlyphs);
+typedef FN_DrvQueryAdvanceWidths *PFN_DrvQueryAdvanceWidths;
+extern FN_DrvQueryAdvanceWidths DrvQueryAdvanceWidths;
+
+/* DrvQueryDeviceSupport.iType constants */
+#define QDS_CHECKJPEGFORMAT               0x00000000
+#define QDS_CHECKPNGFORMAT                0x00000001
 
 typedef BOOL
-(APIENTRY *PFN_DrvQueryDeviceSupport)(
-  SURFOBJ  *pso,
-  XLATEOBJ  *pxlo,
-  XFORMOBJ  *pxo,
-  ULONG  iType,
-  ULONG  cjIn,
-  PVOID  pvIn,
-  ULONG  cjOut,
-  PVOID  pvOut);
+(APIENTRY FN_DrvQueryDeviceSupport)(
+    _In_ SURFOBJ *pso,
+    _In_ XLATEOBJ *pxlo,
+    _In_ XFORMOBJ *pxo,
+    _In_ ULONG iType,
+    _In_ ULONG cjIn,
+    _In_bytecount_(cjIn) PVOID pvIn,
+    _In_ ULONG cjOut,
+    _Out_bytecap_(cjOut) PVOID pvOut);
+typedef FN_DrvQueryDeviceSupport *PFN_DrvQueryDeviceSupport;
+extern FN_DrvQueryDeviceSupport DrvQueryDeviceSupport;
+
+/* DrvQueryDriverInfo.dwMode constants */
+#define DRVQUERY_USERMODE                 0x00000001
 
 typedef BOOL
-(APIENTRY *PFN_DrvQueryDriverInfo)(
-  DWORD  dwMode,
-  PVOID  pBuffer,
-  DWORD  cbBuf,
-  PDWORD  pcbNeeded);
+(APIENTRY FN_DrvQueryDriverInfo)(
+    _In_ DWORD dwMode,
+    _Out_bytecap_(cjBuf) PVOID pBuffer,
+    _In_ DWORD cjBuf,
+    _Out_ PDWORD pcbNeeded);
+typedef FN_DrvQueryDriverInfo *PFN_DrvQueryDriverInfo;
+extern FN_DrvQueryDriverInfo DrvQueryDriverInfo;
 
 typedef PIFIMETRICS
-(APIENTRY *PFN_DrvQueryFont)(
-  IN DHPDEV  dhpdev,
-  IN ULONG_PTR  iFile,
-  IN ULONG  iFace,
-  IN ULONG_PTR  *pid);
+(APIENTRY FN_DrvQueryFont)(
+    _In_ DHPDEV dhpdev,
+    _In_ ULONG_PTR iFile,
+    _In_ ULONG iFace,
+    _Out_ ULONG_PTR *pid);
+typedef FN_DrvQueryFont *PFN_DrvQueryFont;
+extern FN_DrvQueryFont DrvQueryFont;
+
+/* DrvQueryFontCaps.pulCaps constants */
+#define QC_OUTLINES                       0x00000001
+#define QC_1BIT                           0x00000002
+#define QC_4BIT                           0x00000004
+#define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
 
 typedef LONG
-(APIENTRY *PFN_DrvQueryFontCaps)(
-  IN ULONG  culCaps,
-  OUT ULONG  *pulCaps);
+(APIENTRY FN_DrvQueryFontCaps)(
+    _In_ ULONG culCaps,
+    _Out_cap_(culCaps) ULONG *pulCaps);
+typedef FN_DrvQueryFontCaps *PFN_DrvQueryFontCaps;
+extern FN_DrvQueryFontCaps DrvQueryFontCaps;
+
+/* DrvQueryFontData.iMode constants */
+#define QFD_GLYPHANDBITMAP                1L
+#define QFD_GLYPHANDOUTLINE               2L
+#define QFD_MAXEXTENTS                    3L
+#define QFD_TT_GLYPHANDBITMAP             4L
+#define QFD_TT_GRAY1_BITMAP               5L
+#define QFD_TT_GRAY2_BITMAP               6L
+#define QFD_TT_GRAY4_BITMAP               8L
+#define QFD_TT_GRAY8_BITMAP               9L
+
+#define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
 
 typedef LONG
-(APIENTRY *PFN_DrvQueryFontData)(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN HGLYPH  hg,
-  IN OUT GLYPHDATA  *pgd,
-  IN OUT PVOID  pv,
-  IN ULONG  cjSize);
+(APIENTRY FN_DrvQueryFontData)(
+    _In_ DHPDEV dhpdev,
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode,
+    _In_ HGLYPH hg,
+    _In_opt_ GLYPHDATA *pgd,
+    _Out_bytecap_(cjSize) PVOID pv,
+    _In_ ULONG cjSize);
+typedef FN_DrvQueryFontData *PFN_DrvQueryFontData;
+extern FN_DrvQueryFontData DrvQueryFontData;
+
+/* DrvQueryFontFile.ulMode constants */
+#define QFF_DESCRIPTION                   0x00000001
+#define QFF_NUMFACES                      0x00000002
 
 typedef LONG
-(APIENTRY *PFN_DrvQueryFontFile)(
-  IN ULONG_PTR  iFile,
-  IN ULONG  ulMode,
-  IN ULONG  cjBuf,
-  IN ULONG  *pulBuf);
+(APIENTRY FN_DrvQueryFontFile)(
+    _In_ ULONG_PTR iFile,
+    _In_ ULONG ulMode,
+    _In_ ULONG cjBuf,
+    _Out_bytecap_(cjBuf) ULONG *pulBuf);
+typedef FN_DrvQueryFontFile *PFN_DrvQueryFontFile;
+extern FN_DrvQueryFontFile DrvQueryFontFile;
+
+/* DrvQueryFontTree.iMode constants */
+#define QFT_UNICODE                       0L
+#define QFT_LIGATURES                     1L
+#define QFT_KERNPAIRS                     2L
+#define QFT_GLYPHSET                      3L
 
 typedef PVOID
-(APIENTRY *PFN_DrvQueryFontTree)(
-  IN DHPDEV  dhpdev,
-  IN ULONG_PTR  iFile,
-  IN ULONG  iFace,
-  IN ULONG  iMode,
-  IN ULONG_PTR  *pid);
+(APIENTRY FN_DrvQueryFontTree)(
+    _In_ DHPDEV dhpdev,
+    _In_ ULONG_PTR iFile,
+    _In_ ULONG iFace,
+    _In_ ULONG iMode,
+    _Out_ ULONG_PTR *pid);
+typedef FN_DrvQueryFontTree *PFN_DrvQueryFontTree;
+extern FN_DrvQueryFontTree DrvQueryFontTree;
 
 typedef PFD_GLYPHATTR
-(APIENTRY *PFN_DrvQueryGlyphAttrs)(
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode);
+(APIENTRY FN_DrvQueryGlyphAttrs)(
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode);
+typedef FN_DrvQueryGlyphAttrs *PFN_DrvQueryGlyphAttrs;
+extern FN_DrvQueryGlyphAttrs DrvQueryGlyphAttrs;
 
 typedef ULONG
-(APIENTRY *PFN_DrvQueryPerBandInfo)(
-  IN SURFOBJ  *pso,
-  IN OUT PERBANDINFO  *pbi);
+(APIENTRY FN_DrvQueryPerBandInfo)(
+    _In_ SURFOBJ *pso,
+    _Inout_ PERBANDINFO *pbi);
+typedef FN_DrvQueryPerBandInfo *PFN_DrvQueryPerBandInfo;
+extern FN_DrvQueryPerBandInfo DrvQueryPerBandInfo;
+
+/* DrvQueryTrueTypeOutline.bMetricsOnly constants */
+#define TTO_METRICS_ONLY                  0x00000001
+#define TTO_QUBICS                        0x00000002
+#define TTO_UNHINTED                      0x00000004
 
 typedef LONG
-(APIENTRY *PFN_DrvQueryTrueTypeOutline)(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN HGLYPH  hglyph,
-  IN BOOL  bMetricsOnly,
-  IN GLYPHDATA  *pgldt,
-  IN ULONG  cjBuf,
-  OUT TTPOLYGONHEADER  *ppoly);
+(APIENTRY FN_DrvQueryTrueTypeOutline)(
+    _In_ DHPDEV dhpdev,
+    _In_ FONTOBJ *pfo,
+    _In_ HGLYPH hglyph,
+    _In_ BOOL bMetricsOnly,
+    _Out_opt_ GLYPHDATA *pgldt,
+    _In_ ULONG cjBuf,
+    _Out_bytecap_(cjBuf) TTPOLYGONHEADER *ppoly);
+typedef FN_DrvQueryTrueTypeOutline *PFN_DrvQueryTrueTypeOutline;
+extern FN_DrvQueryTrueTypeOutline DrvQueryTrueTypeOutline;
 
 typedef LONG
-(APIENTRY *PFN_DrvQueryTrueTypeTable)(
-  IN ULONG_PTR  iFile,
-  IN ULONG  ulFont,
-  IN ULONG  ulTag,
-  IN PTRDIFF  dpStart,
-  IN ULONG  cjBuf,
-  OUT BYTE  *pjBuf,
-  OUT PBYTE  *ppjTable,
-  OUT ULONG *pcjTable);
+(APIENTRY FN_DrvQueryTrueTypeTable)(
+    _In_ ULONG_PTR iFile,
+    _In_ ULONG ulFont,
+    _In_ ULONG ulTag,
+    _In_ PTRDIFF dpStart,
+    _In_ ULONG cjBuf,
+    _Out_opt_bytecap_(cjBuf) BYTE *pjBuf,
+    _Outptr_opt_result_bytebuffer_all_maybenull_(*pcjTable) PBYTE *ppjTable,
+    _Out_opt_ ULONG *pcjTable);
+typedef FN_DrvQueryTrueTypeTable *PFN_DrvQueryTrueTypeTable;
+extern FN_DrvQueryTrueTypeTable DrvQueryTrueTypeTable;
+
+/* DrvRealizeBrush.iHatch constants */
+#define RB_DITHERCOLOR                    0x80000000L
+
+#define HS_DDI_MAX                        6
 
 typedef BOOL
-(APIENTRY *PFN_DrvRealizeBrush)(
-  IN BRUSHOBJ  *pbo,
-  IN SURFOBJ  *psoTarget,
-  IN SURFOBJ  *psoPattern,
-  IN SURFOBJ  *psoMask,
-  IN XLATEOBJ  *pxlo,
-  IN ULONG  iHatch);
+(APIENTRY FN_DrvRealizeBrush)(
+    _In_ BRUSHOBJ *pbo,
+    _Inout_ SURFOBJ *psoTarget, // CHECKME
+    _In_opt_ SURFOBJ *psoPattern,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ ULONG iHatch);
+typedef FN_DrvRealizeBrush *PFN_DrvRealizeBrush;
+extern FN_DrvRealizeBrush DrvRealizeBrush;
+
+/* DrvResetDevice return values */
+#define DRD_SUCCESS                       0
+#define DRD_ERROR                         1
 
 typedef ULONG
-(APIENTRY *PFN_DrvResetDevice)(
-  IN DHPDEV dhpdev,
-  IN PVOID Reserved);
+(APIENTRY FN_DrvResetDevice)(
+    _In_ DHPDEV dhpdev,
+    _Reserved_ PVOID Reserved);
+typedef FN_DrvResetDevice *PFN_DrvResetDevice;
+extern FN_DrvResetDevice DrvResetDevice;
 
 typedef BOOL
-(APIENTRY *PFN_DrvResetPDEV)(
-  DHPDEV  dhpdevOld,
-  DHPDEV  dhpdevNew);
+(APIENTRY FN_DrvResetPDEV)(
+    _In_ DHPDEV dhpdevOld,
+    _In_ DHPDEV dhpdevNew);
+typedef FN_DrvResetPDEV *PFN_DrvResetPDEV;
+extern FN_DrvResetPDEV DrvResetPDEV;
+
+/* DrvSaveScreenBits.iMode constants */
+#define SS_SAVE                           0x00000000
+#define SS_RESTORE                        0x00000001
+#define SS_FREE                           0x00000002
 
 typedef ULONG_PTR
-(APIENTRY *PFN_DrvSaveScreenBits)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iMode,
-  IN ULONG_PTR  ident,
-  IN RECTL  *prcl);
+(APIENTRY FN_DrvSaveScreenBits)(
+    _In_ SURFOBJ *pso,
+    _In_ ULONG iMode,
+    _In_ ULONG_PTR ident,
+    _In_ RECTL *prcl);
+typedef FN_DrvSaveScreenBits *PFN_DrvSaveScreenBits;
+extern FN_DrvSaveScreenBits DrvSaveScreenBits;
 
 typedef BOOL
-(APIENTRY *PFN_DrvSendPage)(
-  IN SURFOBJ  *pso);
+(APIENTRY FN_DrvSendPage)(
+    _In_ SURFOBJ *pso);
+typedef FN_DrvSendPage *PFN_DrvSendPage;
+extern FN_DrvSendPage DrvSendPage;
+
+/* DrvSetPalette range */
+#define WINDDI_MAXSETPALETTECOLORS     256
+#define WINDDI_MAXSETPALETTECOLORINDEX 255
 
 typedef BOOL
-(APIENTRY *PFN_DrvSetPalette)(
-  IN DHPDEV  dhpdev,
-  IN PALOBJ  *ppalo,
-  IN FLONG  fl,
-  IN ULONG  iStart,
-  IN ULONG  cColors);
+(APIENTRY FN_DrvSetPalette)(
+    _In_ DHPDEV dhpdev,
+    _In_ PALOBJ *ppalo,
+    _In_ FLONG fl,
+    _In_range_(0, WINDDI_MAXSETPALETTECOLORINDEX) ULONG iStart,
+    _In_range_(0, WINDDI_MAXSETPALETTECOLORS - iStart) ULONG cColors);
+typedef FN_DrvSetPalette *PFN_DrvSetPalette;
+extern FN_DrvSetPalette DrvSetPalette;
 
 typedef BOOL
-(APIENTRY *PFN_DrvSetPixelFormat)(
-  IN SURFOBJ  *pso,
-  IN LONG  iPixelFormat,
-  IN HWND  hwnd);
+(APIENTRY FN_DrvSetPixelFormat)(
+    _In_ SURFOBJ *pso,
+    _In_ LONG iPixelFormat,
+    _In_ HWND hwnd);
+typedef FN_DrvSetPixelFormat *PFN_DrvSetPixelFormat;
+extern FN_DrvSetPixelFormat DrvSetPixelFormat;
+
+/* DrvSetPointerShape return values */
+#define SPS_ERROR                         0x00000000
+#define SPS_DECLINE                       0x00000001
+#define SPS_ACCEPT_NOEXCLUDE              0x00000002
+#define SPS_ACCEPT_EXCLUDE                0x00000003
+#define SPS_ACCEPT_SYNCHRONOUS            0x00000004
+
+/* DrvSetPointerShape.fl constants */
+#define SPS_CHANGE                        0x00000001L
+#define SPS_ASYNCCHANGE                   0x00000002L
+#define SPS_ANIMATESTART                  0x00000004L
+#define SPS_ANIMATEUPDATE                 0x00000008L
+#define SPS_ALPHA                         0x00000010L
+#define SPS_RESERVED                      0x00000020L /* Force s/w cursor rendering */
+#define SPS_RESERVED1                     0x00000040L /* Force show/hide system cursor */
+#define SPS_FLAGSMASK                     0x000000FFL
+#define SPS_LENGTHMASK                    0x00000F00L
+#define SPS_FREQMASK                      0x000FF000L
 
 typedef ULONG
-(APIENTRY *PFN_DrvSetPointerShape)(
-  IN SURFOBJ  *pso,
-  IN SURFOBJ  *psoMask,
-  IN SURFOBJ  *psoColor,
-  IN XLATEOBJ  *pxlo,
-  IN LONG  xHot,
-  IN LONG  yHot,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl,
-  IN FLONG  fl);
+(APIENTRY FN_DrvSetPointerShape)(
+    _In_ SURFOBJ *pso,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_opt_ SURFOBJ *psoColor,
+    _In_ XLATEOBJ *pxlo,
+    _In_ LONG xHot,
+    _In_ LONG yHot,
+    _In_ LONG x,
+    _In_ LONG y,
+    _In_ RECTL *prcl,
+    _In_ FLONG fl);
+typedef FN_DrvSetPointerShape *PFN_DrvSetPointerShape;
+extern FN_DrvSetPointerShape DrvSetPointerShape;
 
 typedef BOOL
-(APIENTRY *PFN_DrvStartBanding)(
-  IN SURFOBJ  *pso,
-  IN POINTL  *pptl);
+(APIENTRY FN_DrvStartBanding)(
+    _In_ SURFOBJ *pso,
+    _In_ POINTL *pptl);
+typedef FN_DrvStartBanding *PFN_DrvStartBanding;
+extern FN_DrvStartBanding DrvStartBanding;
 
 typedef BOOL
-(APIENTRY *PFN_DrvStartDoc)(
-  IN SURFOBJ  *pso,
-  IN LPWSTR  pwszDocName,
-  IN DWORD  dwJobId);
+(APIENTRY FN_DrvStartDoc)(
+    _In_ SURFOBJ *pso,
+    _In_ LPWSTR pwszDocName,
+    _In_ DWORD dwJobId);
+typedef FN_DrvStartDoc *PFN_DrvStartDoc;
+extern FN_DrvStartDoc DrvStartDoc;
 
 typedef BOOL
-(APIENTRY *PFN_DrvStartPage)(
-  IN SURFOBJ  *pso);
+(APIENTRY FN_DrvStartPage)(
+    _In_ SURFOBJ *pso);
+typedef FN_DrvStartPage *PFN_DrvStartPage;
+extern FN_DrvStartPage DrvStartPage;
 
 typedef BOOL
-(APIENTRY *PFN_DrvStretchBlt)(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlHTOrg,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN POINTL  *pptlMask,
-  IN ULONG  iMode);
+(APIENTRY FN_DrvStretchBlt)(
+    _Inout_ SURFOBJ *psoDest,
+    _Inout_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_opt_ COLORADJUSTMENT *pca,
+    _In_ POINTL *pptlHTOrg,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _When_(psoMask, _In_) POINTL *pptlMask,
+    _In_ ULONG iMode);
+typedef FN_DrvStretchBlt *PFN_DrvStretchBlt;
+extern FN_DrvStretchBlt DrvStretchBlt;
 
 typedef BOOL
-(APIENTRY *PFN_DrvStretchBltROP)(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN SURFOBJ  *psoMask,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN COLORADJUSTMENT  *pca,
-  IN POINTL  *pptlHTOrg,
-  IN RECTL  *prclDest,
-  IN RECTL  *prclSrc,
-  IN POINTL  *pptlMask,
-  IN ULONG  iMode,
-  IN BRUSHOBJ  *pbo,
-  IN DWORD  rop4);
+(APIENTRY FN_DrvStretchBltROP)(
+    _Inout_ SURFOBJ *psoDest,
+    _Inout_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_opt_ COLORADJUSTMENT *pca,
+    _In_ POINTL *pptlHTOrg,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _When_(psoMask, _In_) POINTL *pptlMask,
+    _In_ ULONG iMode,
+    _In_ BRUSHOBJ *pbo,
+    _In_ DWORD rop4);
+typedef FN_DrvStretchBltROP *PFN_DrvStretchBltROP;
+extern FN_DrvStretchBltROP DrvStretchBltROP;
 
 typedef BOOL
-(APIENTRY *PFN_DrvStrokeAndFillPath)(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN XFORMOBJ  *pxo,
-  IN BRUSHOBJ  *pboStroke,
-  IN LINEATTRS  *plineattrs,
-  IN BRUSHOBJ  *pboFill,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mixFill,
-  IN FLONG  flOptions);
+(APIENTRY FN_DrvStrokeAndFillPath)(
+    _Inout_ SURFOBJ *pso,
+    _Inout_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XFORMOBJ *pxo,
+    _In_ BRUSHOBJ *pboStroke,
+    _In_ LINEATTRS *plineattrs,
+    _In_ BRUSHOBJ *pboFill,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ MIX mixFill,
+    _In_ FLONG flOptions);
+typedef FN_DrvStrokeAndFillPath *PFN_DrvStrokeAndFillPath;
+extern FN_DrvStrokeAndFillPath DrvStrokeAndFillPath;
 
 typedef BOOL
-(APIENTRY *PFN_DrvStrokePath)(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN XFORMOBJ  *pxo,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN LINEATTRS  *plineattrs,
-  IN MIX  mix);
+(APIENTRY FN_DrvStrokePath)(
+    _Inout_ SURFOBJ *pso,
+    _In_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XFORMOBJ *pxo,
+    _In_ BRUSHOBJ *pbo,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ LINEATTRS *plineattrs,
+    _In_ MIX mix);
+typedef FN_DrvStrokePath *PFN_DrvStrokePath;
+extern FN_DrvStrokePath DrvStrokePath;
 
 typedef BOOL
-(APIENTRY *PFN_DrvSwapBuffers)(
-  IN SURFOBJ  *pso,
-  IN WNDOBJ  *pwo);
+(APIENTRY FN_DrvSwapBuffers)(
+    _In_ SURFOBJ *pso,
+    _In_ WNDOBJ *pwo);
+typedef FN_DrvSwapBuffers *PFN_DrvSwapBuffers;
+extern FN_DrvSwapBuffers DrvSwapBuffers;
 
 typedef VOID
-(APIENTRY *PFN_DrvSynchronize)(
-  IN DHPDEV  dhpdev,
-  IN RECTL  *prcl);
+(APIENTRY FN_DrvSynchronize)(
+    _In_ DHPDEV dhpdev,
+    _In_count_c_(0) RECTL *prcl); // should be ignored
+typedef FN_DrvSynchronize *PFN_DrvSynchronize;
+extern FN_DrvSynchronize DrvSynchronize;
+
+/* DrvSynchronizeSurface.fl constants */
+#define DSS_TIMER_EVENT                   0x00000001
+#define DSS_FLUSH_EVENT                   0x00000002
+#define DSS_RESERVED                      0x00000004
+#define DSS_RESERVED1                     0x00000008
 
 typedef VOID
-(APIENTRY *PFN_DrvSynchronizeSurface)(
-  IN SURFOBJ  *pso,
-  IN RECTL  *prcl,
-  IN FLONG  fl);
+(APIENTRY FN_DrvSynchronizeSurface)(
+    _In_ SURFOBJ *pso,
+    _In_opt_ RECTL *prcl,
+    _In_ FLONG fl);
+typedef FN_DrvSynchronizeSurface *PFN_DrvSynchronizeSurface;
+extern FN_DrvSynchronizeSurface DrvSynchronizeSurface;
 
 typedef BOOL
-(APIENTRY *PFN_DrvTextOut)(
-  IN SURFOBJ  *pso,
-  IN STROBJ  *pstro,
-  IN FONTOBJ  *pfo,
-  IN CLIPOBJ  *pco,
-  IN RECTL  *prclExtra,
-  IN RECTL  *prclOpaque,
-  IN BRUSHOBJ  *pboFore,
-  IN BRUSHOBJ  *pboOpaque,
-  IN POINTL  *pptlOrg,
-  IN MIX  mix);
+(APIENTRY FN_DrvTextOut)(
+    _In_ SURFOBJ *pso,
+    _In_ STROBJ *pstro,
+    _In_ FONTOBJ *pfo,
+    _In_ CLIPOBJ *pco,
+    _Null_ RECTL *prclExtra,
+    _In_opt_ RECTL *prclOpaque,
+    _In_ BRUSHOBJ *pboFore,
+    _In_ BRUSHOBJ *pboOpaque,
+    _In_ POINTL *pptlOrg,
+    _In_ MIX mix);
+typedef FN_DrvTextOut *PFN_DrvTextOut;
+extern FN_DrvTextOut DrvTextOut;
 
 typedef BOOL
-(APIENTRY *PFN_DrvTransparentBlt)(
-  IN SURFOBJ  *psoDst,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDst,
-  IN RECTL  *prclSrc,
-  IN ULONG  iTransColor,
-  IN ULONG  ulReserved);
+(APIENTRY FN_DrvTransparentBlt)(
+    _Inout_ SURFOBJ *psoDst,
+    _In_ SURFOBJ *psoSrc,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDst,
+    _In_ RECTL *prclSrc,
+    _In_ ULONG iTransColor,
+    _In_ ULONG ulReserved);
+typedef FN_DrvTransparentBlt *PFN_DrvTransparentBlt;
+extern FN_DrvTransparentBlt DrvTransparentBlt;
 
 typedef BOOL
-(APIENTRY *PFN_DrvUnloadFontFile)(
-  IN ULONG_PTR  iFile);
+(APIENTRY FN_DrvUnloadFontFile)(
+    _In_ ULONG_PTR iFile);
+typedef FN_DrvUnloadFontFile *PFN_DrvUnloadFontFile;
+extern FN_DrvUnloadFontFile DrvUnloadFontFile;
 
+/* Direct draw */
 
-WIN32KAPI
-VOID
-APIENTRY
-DrvDisableDirectDraw(
-  IN DHPDEV  dhpdev);
+typedef VOID
+(APIENTRY FN_DrvDisableDirectDraw)(
+    _In_ DHPDEV dhpdev);
+typedef FN_DrvDisableDirectDraw *PFN_DrvDisableDirectDraw;
+extern FN_DrvDisableDirectDraw DrvDisableDirectDraw;
+
+typedef BOOL
+(APIENTRY FN_DrvEnableDirectDraw)(
+    _In_ DHPDEV dhpdev,
+    _Out_ DD_CALLBACKS *pCallBacks,
+    _Out_ DD_SURFACECALLBACKS *pSurfaceCallBacks,
+    _Out_ DD_PALETTECALLBACKS *pPaletteCallBacks);
+typedef FN_DrvEnableDirectDraw *PFN_DrvEnableDirectDraw;
+extern FN_DrvEnableDirectDraw DrvEnableDirectDraw;
+
+typedef BOOL
+(APIENTRY FN_DrvGetDirectDrawInfo)(
+    _In_ DHPDEV dhpdev,
+    _Out_ DD_HALINFO *pHalInfo,
+    _Out_ DWORD *pdwNumHeaps,
+    _Out_ VIDEOMEMORY *pvmList,
+    _Out_ DWORD *pdwNumFourCCCodes,
+    _Out_ DWORD *pdwFourCC);
+typedef FN_DrvGetDirectDrawInfo *PFN_DrvGetDirectDrawInfo;
+extern FN_DrvGetDirectDrawInfo DrvGetDirectDrawInfo;
+
+typedef BOOL //DECLSPEC_DEPRECATED_DDK
+(APIENTRY FN_DrvQuerySpoolType)(
+    _In_ DHPDEV dhpdev,
+    _In_ LPWSTR pwchType);
+typedef FN_DrvQuerySpoolType *PFN_DrvQuerySpoolType;
+extern FN_DrvQuerySpoolType DrvQuerySpoolType;
 
+typedef LONG
+(APIENTRY FN_DrvQueryTrueTypeSection)(
+    ULONG,
+    ULONG,
+    ULONG,
+    HANDLE *,
+    PTRDIFF *);
+typedef FN_DrvQueryTrueTypeSection *PFN_DrvQueryTrueTypeSection;
+extern FN_DrvQueryTrueTypeSection DrvQueryTrueTypeSection;
+
+DECLSPEC_DEPRECATED_DDK
 typedef VOID
-(APIENTRY *PFN_DrvDisableDirectDraw)(
-  IN DHPDEV  dhpdev);
+(APIENTRY FN_DrvMovePanning)(
+    _In_ LONG x,
+    _In_ LONG y,
+    _In_ FLONG fl);
+typedef FN_DrvMovePanning *PFN_DrvMovePanning;
+extern FN_DrvMovePanning DrvMovePanning;
 
-WIN32KAPI
-BOOL
-APIENTRY
-DrvEnableDirectDraw(
-  IN DHPDEV  dhpdev,
-  OUT DD_CALLBACKS  *pCallBacks,
-  OUT DD_SURFACECALLBACKS  *pSurfaceCallBacks,
-  OUT DD_PALETTECALLBACKS  *pPaletteCallBacks);
+#if (NTDDI_VERSION >= NTDDI_VISTA)
+
+typedef LONG
+(APIENTRY FN_DrvRenderHint)(
+    _In_ DHPDEV dhpdev,
+    _In_ ULONG NotifyCode,
+    _In_ SIZE_T Length,
+    _In_reads_bytes_opt_(Length) PVOID Data);
+typedef FN_DrvRenderHint *PFN_DrvRenderHint;
+extern FN_DrvRenderHint DrvRenderHint;
+
+typedef struct _DRH_APIBITMAPDATA
+{
+    SURFOBJ *pso;
+    BOOL b;
+} DRH_APIBITMAPDATA, *PDRH_APIBITMAPDATA;
+
+#define DRH_APIBITMAP 0x00000001
+
+typedef HANDLE
+(APIENTRY FN_EngCreateRectRgn)(
+    _In_ INT left,
+    _In_ INT top,
+    _In_ INT right,
+    _In_ INT bottom);
+typedef FN_EngCreateRectRgn *PFN_EngCreateRectRgn;
+
+typedef VOID
+(APIENTRY FN_EngDeleteRgn)(
+    HANDLE hrgn);
+typedef FN_EngDeleteRgn *PFN_EngDeleteRgn;
+
+typedef INT
+(APIENTRY FN_EngCombineRgn)(
+    _In_ HANDLE hrgnTrg,
+    _In_ HANDLE hrgnSrc1,
+    _In_ HANDLE hrgnSrc2,
+    _In_ INT iMode);
+typedef FN_EngCombineRgn *PFN_EngCombineRgn;
+
+typedef INT
+(APIENTRY FN_EngCopyRgn)(
+    _In_ HANDLE hrgnDst,
+    _In_ HANDLE hrgnSrc);
+typedef FN_EngCopyRgn *PFN_EngCopyRgn;
+
+typedef INT
+(APIENTRY FN_EngIntersectRgn)(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
+typedef FN_EngIntersectRgn *PFN_EngIntersectRgn;
+
+typedef INT
+(APIENTRY FN_EngSubtractRgn)(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
+typedef FN_EngSubtractRgn *PFN_EngSubtractRgn;
+
+typedef INT
+(APIENTRY FN_EngUnionRgn)(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
+typedef FN_EngUnionRgn *PFN_EngUnionRgn;
+
+typedef INT
+(APIENTRY FN_EngXorRgn)(
+    _In_ HANDLE hrgnResult,
+    _In_ HANDLE hRgnA,
+    _In_ HANDLE hRgnB);
+typedef FN_EngXorRgn *PFN_EngXorRgn;
+
+#endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
+
+#if (NTDDI_VERSION >= NTDDI_WIN7)
+
+/* DrvCreateDeviceBitmapEx() flags */
+#define CDBEX_REDIRECTION  0x00000001
+#define CDBEX_DXINTEROP    0x00000002
+
+typedef HBITMAP
+(APIENTRY FN_DrvCreateDeviceBitmapEx)(
+    _In_ DHPDEV dhpdev,
+    _In_ SIZEL sizl,
+    _In_ ULONG iFormat,
+    _In_ DWORD Flags,
+    _In_ DHSURF dhsurfGroup,
+    _In_ DWORD DxFormat,
+#if (NTDDI_VERSION >= NTDDI_WIN8)
+    _In_ DWORD SubresourceIndex,
+#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
+    _Out_ HANDLE* phSharedSurface);
+typedef FN_DrvCreateDeviceBitmapEx *PFN_DrvCreateDeviceBitmapEx;
+extern DrvCreateDeviceBitmapEx DrvCreateDeviceBitmapEx
+
+typedef VOID
+(APIENTRY FN_DrvDeleteDeviceBitmapEx)(
+    _Inout_ DHSURF);
+typedef FN_DrvDeleteDeviceBitmapEx *PFN_DrvDeleteDeviceBitmapEx;
+extern FN_DrvDeleteDeviceBitmapEx DrvDeleteDeviceBitmapEx;
 
 typedef BOOL
-(APIENTRY *PFN_DrvEnableDirectDraw)(
-  IN DHPDEV  dhpdev,
-  OUT DD_CALLBACKS  *pCallBacks,
-  OUT DD_SURFACECALLBACKS  *pSurfaceCallBacks,
-  OUT DD_PALETTECALLBACKS  *pPaletteCallBacks);
+(APIENTRY FN_DrvAssociateSharedSurface)(
+    _In_ SURFOBJ* psoSurf,
+    _In_ HANDLE   hPhysicalSurface,
+    _In_ HANDLE   hLogicalSurface,
+    _In_ SIZEL    sizl);
+typedef FN_DrvAssociateSharedSurface *PFN_DrvAssociateSharedSurface;
+extern
 
-WIN32KAPI
-BOOL
-APIENTRY
-DrvGetDirectDrawInfo(
-  IN DHPDEV  dhpdev,
-  OUT DD_HALINFO  *pHalInfo,
-  OUT DWORD  *pdwNumHeaps,
-  OUT VIDEOMEMORY  *pvmList,
-  OUT DWORD  *pdwNumFourCCCodes,
-  OUT DWORD  *pdwFourCC);
+typedef LONG
+(APIENTRY FN_DrvSynchronizeRedirectionBitmaps)(
+    _In_ DHPDEV  dhpdev,
+    _Out_ UINT64* puiFenceID);
+typedef FN_DrvSynchronizeRedirectionBitmaps *PFN_DrvSynchronizeRedirectionBitmaps;
+extern FN_DrvSynchronizeRedirectionBitmaps DrvSynchronizeRedirectionBitmaps;
+
+#define WINDDI_MAX_BROADCAST_CONTEXT 64
+typedef struct tagCDDDXGK_REDIRBITMAPPRESENTINFO
+{
+    UINT NumDirtyRects;
+    PRECT DirtyRect;
+    UINT NumContexts;
+    HANDLE hContext[WINDDI_MAX_BROADCAST_CONTEXT+1];
+} CDDDXGK_REDIRBITMAPPRESENTINFO;
 
 typedef BOOL
-(APIENTRY *PFN_DrvGetDirectDrawInfo)(
-  IN DHPDEV  dhpdev,
-  OUT DD_HALINFO  *pHalInfo,
-  OUT DWORD  *pdwNumHeaps,
-  OUT VIDEOMEMORY  *pvmList,
-  OUT DWORD  *pdwNumFourCCCodes,
-  OUT DWORD  *pdwFourCC);
-
-//DECLSPEC_DEPRECATED_DDK
-BOOL
-APIENTRY
-DrvQuerySpoolType(
-  IN DHPDEV dhpdev,
-  IN LPWSTR pwchType);
+(APIENTRY FN_DrvAccumulateD3DDirtyRect)(
+    _In_ SURFOBJ* psoSurf,
+    _In_ CDDDXGK_REDIRBITMAPPRESENTINFO* pDirty);
+typedef FN_DrvAccumulateD3DDirtyRect *PFN_DrvAccumulateD3DDirtyRect;
+extern FN_DrvAccumulateD3DDirtyRect DrvAccumulateD3DDirtyRect;
+
+typedef BOOL
+(APIENTRY FN_DrvStartDxInterop)(
+    _In_ SURFOBJ* psoSurf,
+    _In_ BOOL bDiscard,
+    _In_ PVOID KernelModeDeviceHandle);
+typedef FN_DrvStartDxInterop *PFN_DrvStartDxInterop;
+extern FN_DrvStartDxInterop DrvStartDxInterop;
 
 typedef BOOL
-(APIENTRY *PFN_DrvQuerySpoolType)(
-  IN DHPDEV dhpdev,
-  IN LPWSTR pwchType);
+(APIENTRY FN_DrvEndDxInterop)(
+    _In_ SURFOBJ* psoSurf,
+    _In_ BOOL bDiscard,
+    _Out_ BOOL* bDeviceLost,
+    _In_ PVOID KernelModeDeviceHandle);
+typedef FN_DrvEndDxInterop *PFN_DrvEndDxInterop;
+extern FN_DrvEndDxInterop DrvEndDxInterop;
+
+typedef VOID
+(APIENTRY FN_DrvLockDisplayArea)(
+    _In_ DHPDEV dhpdev,
+    _In_opt_ RECTL  *prcl);
+typedef FN_DrvLockDisplayArea *PFN_DrvLockDisplayArea;
+extern FN_DrvLockDisplayArea DrvLockDisplayArea;
+
+typedef VOID
+(APIENTRY FN_DrvUnlockDisplayArea)(
+    _In_ DHPDEV dhpdev,
+    _In_opt_ RECTL *prcl);
+typedef FN_DrvUnlockDisplayArea *PFN_DrvUnlockDisplayArea;
+extern FN_DrvUnlockDisplayArea DrvUnlockDisplayArea;
 
+#endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
 
 #ifdef __cplusplus
 }