[ros-diffs] [tkreuzer] 54900: [PSDK] - add annotations to winddi.h - use function types for Drv* declarations

tkreuzer at svn.reactos.org tkreuzer at svn.reactos.org
Tue Jan 10 14:47:45 UTC 2012


Author: tkreuzer
Date: Tue Jan 10 14:47:43 2012
New Revision: 54900

URL: http://svn.reactos.org/svn/reactos?rev=54900&view=rev
Log:
[PSDK]
- add annotations to winddi.h
- use function types for Drv* declarations

Modified:
    trunk/reactos/include/psdk/winddi.h

Modified: trunk/reactos/include/psdk/winddi.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/psdk/winddi.h?rev=54900&r1=54899&r2=54900&view=diff
==============================================================================
--- trunk/reactos/include/psdk/winddi.h [iso-8859-1] (original)
+++ trunk/reactos/include/psdk/winddi.h [iso-8859-1] Tue Jan 10 14:47:43 2012
@@ -7,6 +7,7 @@
  *
  * Contributors:
  *   Created by Casper S. Hornstrup <chorns at users.sourceforge.net>
+ *   Annotations by Timo Kreuzer <timo.kreuzer at reactos.org>
  *
  * THIS SOFTWARE IS NOT COPYRIGHTED
  *
@@ -29,6 +30,7 @@
 
 #include <ddrawint.h>
 #include <d3dnthal.h>
+#include <specstrings.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -322,7 +324,7 @@
 
 typedef BOOL
 (APIENTRY CALLBACK *FREEOBJPROC)(
-  IN struct _DRIVEROBJ  *pDriverObj);
+    _In_ struct _DRIVEROBJ  *pDriverObj);
 
 typedef struct _DRIVEROBJ {
   PVOID  pvObj;
@@ -1039,7 +1041,6 @@
 } STROBJ;
 
 
-
 /* SURFOBJ.iType constants */
 #define STYPE_BITMAP                      0L
 #define STYPE_DEVICE                      1L
@@ -1127,42 +1128,42 @@
 #define WOC_SPRITE_NO_OVERLAP             0x00000100
 
 typedef VOID (APIENTRY CALLBACK *WNDOBJCHANGEPROC)(
-  IN WNDOBJ  *pwo,
-  IN FLONG  fl);
+    _In_ WNDOBJ *pwo,
+    _In_ FLONG fl);
 
 
 WIN32KAPI
 HANDLE
 APIENTRY
 BRUSHOBJ_hGetColorTransform(
-  IN BRUSHOBJ  *pbo);
+    _In_ BRUSHOBJ *pbo);
 
 WIN32KAPI
 PVOID
 APIENTRY
 BRUSHOBJ_pvAllocRbrush(
-  IN BRUSHOBJ  *pbo,
-  IN ULONG  cj);
+    _In_ BRUSHOBJ *pbo,
+    _In_ ULONG cj);
 
 WIN32KAPI
 PVOID
 APIENTRY
 BRUSHOBJ_pvGetRbrush(
-  IN BRUSHOBJ  *pbo);
+    _In_ BRUSHOBJ *pbo);
 
 WIN32KAPI
 ULONG
 APIENTRY
 BRUSHOBJ_ulGetBrushColor(
-  IN BRUSHOBJ  *pbo);
+    _In_ BRUSHOBJ *pbo);
 
 WIN32KAPI
 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
@@ -1180,61 +1181,68 @@
 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
 PATHOBJ*
 APIENTRY
 CLIPOBJ_ppoGetPath(
-  IN CLIPOBJ  *pco);
+    _In_ CLIPOBJ *pco);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngAcquireSemaphore(
-  IN HSEMAPHORE  hsem);
+    _Inout_ HSEMAPHORE hsem);
 
 #define FL_ZERO_MEMORY                    0x00000001
 #define FL_NONPAGED_MEMORY                0x00000002
 
+_Must_inspect_result_
+_When_(fl & FL_ZERO_MEMORY, _Ret_opt_bytecount_(cjMemSize))
+_When_(!(fl & FL_ZERO_MEMORY), _Ret_opt_bytecap_(cjMemSize))
 WIN32KAPI
 PVOID
 APIENTRY
 EngAllocMem(
-  IN ULONG  Flags,
-  IN ULONG  MemSize,
-  IN ULONG  Tag);
-
+    _In_ ULONG fl,
+    _In_ ULONG cjMemSize,
+    _In_ ULONG ulTag);
+
+_Must_inspect_result_
+_Ret_opt_bytecount_(cj)
 WIN32KAPI
 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);
+
+_Must_inspect_result_
+_Ret_opt_bytecount_(cjMemSize)
 WIN32KAPI
 PVOID
 APIENTRY
 EngAllocUserMem(
-  IN SIZE_T  cj,
-  IN ULONG  tag);
+    _In_ SIZE_T cjMemSize,
+    _In_ ULONG ulTag);
 
 WIN32KAPI
 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_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _In_ BLENDOBJ *pBlendObj);
 
 /* EngAssociateSurface.flHooks constants */
 #define HOOK_BITBLT                       0x00000001
@@ -1260,45 +1268,45 @@
 BOOL
 APIENTRY
 EngAssociateSurface(
-  IN HSURF  hsurf,
-  IN HDEV  hdev,
-  IN FLONG  flHooks);
+    _In_ HSURF hsurf,
+    _In_ HDEV hdev,
+    _In_ FLONG flHooks);
 
 WIN32KAPI
 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);
+    _Inout_ SURFOBJ *psoTrg,
+    _In_opt_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_ CLIPOBJ *pco,
+    _In_opt_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclTrg,
+    _When_(psoSrc, _In_) POINTL *pptlSrc,
+    _When_(psoMask, _In_) POINTL *pptlMask,
+    _In_opt_ BRUSHOBJ *pbo,
+    _In_opt_ POINTL *pptlBrush,
+    _In_ ROP4 rop4);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngCheckAbort(
-  IN SURFOBJ  *pso);
+    _In_ SURFOBJ *pso);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngClearEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
 WIN32KAPI
 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
@@ -1308,67 +1316,66 @@
 BOOL
 APIENTRY
 EngControlSprites(
-  IN WNDOBJ  *pwo,
-  IN FLONG  fl);
+    _Inout_ WNDOBJ *pwo,
+    _In_ FLONG fl);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngCopyBits(
-  OUT SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN POINTL  *pptlSrc);
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_ CLIPOBJ *pco,
+    _In_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDest,
+    _In_ POINTL *pptlSrc);
 
 WIN32KAPI
 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_ PVOID pvBits);
 
 WIN32KAPI
 CLIPOBJ*
 APIENTRY
-EngCreateClip(
-  VOID);
+EngCreateClip(VOID);
 
 WIN32KAPI
 HBITMAP
 APIENTRY
 EngCreateDeviceBitmap(
-  IN DHSURF  dhsurf,
-  IN SIZEL  sizl,
-  IN ULONG  iFormatCompat);
-
+    _In_ DHSURF dhsurf,
+    _In_ SIZEL sizl,
+    _In_ ULONG iFormatCompat);
+
+_Must_inspect_result_
 WIN32KAPI
 HSURF
 APIENTRY
 EngCreateDeviceSurface(
-  DHSURF  dhsurf,
-  SIZEL  sizl,
-  ULONG  iFormatCompat);
-
-#if 0
+    _In_ DHSURF dhsurf,
+    _In_ SIZEL sizl,
+    _In_ ULONG iFormatCompat);
+
+_Must_inspect_result_
 WIN32KAPI
 HDRVOBJ
 APIENTRY
 EngCreateDriverObj(
-  PVOID  pvObj,
-  FREEOBJPROC  pFreeObjProc,
-  HDEV  hdev);
-#endif
+    _In_ PVOID pvObj,
+    _In_opt_ FREEOBJPROC pFreeObjProc,
+    _In_ HDEV hdev);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngCreateEvent(
-  OUT PEVENT  *ppEvent);
+    _Deref_out_opt_ PEVENT *ppEvent);
 
 /* EngCreatePalette.iMode constants */
 #define PAL_INDEXED                       0x00000001
@@ -1377,28 +1384,27 @@
 #define PAL_BGR                           0x00000008
 #define PAL_CMYK                          0x00000010
 
+_Must_inspect_result_
 WIN32KAPI
 HPALETTE
 APIENTRY
 EngCreatePalette(
-  IN ULONG  iMode,
-  IN ULONG  cColors,
-  IN ULONG  *pulColors,
-  IN FLONG  flRed,
-  IN FLONG  flGreen,
-  IN FLONG  flBlue);
+    _In_ ULONG iMode,
+    _In_ ULONG cColors,
+    _In_ ULONG *pulColors,
+    _In_ FLONG flRed,
+    _In_ FLONG flGreen,
+    _In_ FLONG flBlue);
 
 WIN32KAPI
 PATHOBJ*
 APIENTRY
-EngCreatePath(
-  VOID);
+EngCreatePath(VOID);
 
 WIN32KAPI
 HSEMAPHORE
 APIENTRY
-EngCreateSemaphore(
-  VOID);
+EngCreateSemaphore(VOID);
 
 /* EngCreateWnd.fl constants */
 #define WO_RGN_CLIENT_DELTA               0x00000001
@@ -1411,166 +1417,170 @@
 #define WO_SPRITE_NOTIFY                  0x00000080
 #define WO_RGN_DESKTOP_COORD              0x00000100
 
+_Must_inspect_result_
 WIN32KAPI
 WNDOBJ*
 APIENTRY
 EngCreateWnd(
-  SURFOBJ  *pso,
-  HWND  hwnd,
-  WNDOBJCHANGEPROC  pfn,
-  FLONG  fl,
-  int  iPixelFormat);
-
-WIN32KAPI
-VOID
-APIENTRY
-EngDebugBreak(
-  VOID);
+    _In_ SURFOBJ *pso,
+    _In_ HWND hwnd,
+    _In_ WNDOBJCHANGEPROC pfn,
+    _In_ FLONG fl,
+    _In_ INT iPixelFormat);
+
+WIN32KAPI
+VOID
+APIENTRY
+EngDebugBreak(VOID);
 
 WIN32KAPI
 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
 VOID
 APIENTRY
 EngDeleteClip(
-  IN CLIPOBJ  *pco);
+    _In_ CLIPOBJ *pco);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngDeleteDriverObj(
-  IN HDRVOBJ  hdo,
-  IN BOOL  bCallBack,
-  IN BOOL  bLocked);
+    _In_ HDRVOBJ hdo,
+    _In_ BOOL bCallBack,
+    _In_ BOOL bLocked);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngDeleteEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngDeleteFile(
-  IN LPWSTR  pwszFileName);
+    _In_ LPWSTR pwszFileName);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngDeletePalette(
-  IN HPALETTE  hpal);
+    _In_ HPALETTE hpal);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngDeletePath(
-  IN PATHOBJ  *ppo);
+    _Inout_ PATHOBJ *ppo);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngDeleteSafeSemaphore(
-  IN OUT ENGSAFESEMAPHORE  *pssem);
+    _Inout_ ENGSAFESEMAPHORE *pssem);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngDeleteSemaphore(
-  IN OUT HSEMAPHORE  hsem);
+    _Inout_ HSEMAPHORE hsem);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngDeleteSurface(
-  IN HSURF  hsurf);
+    _In_ HSURF hsurf);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngDeleteWnd(
-  IN WNDOBJ  *pwo);
+    _Inout_ WNDOBJ *pwo);
 
 WIN32KAPI
 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);
+    _In_ HANDLE hDevice,
+    _In_ DWORD dwIoControlCode,
+    _In_opt_bytecount_(cjInBufferSize) LPVOID lpInBuffer,
+    _In_ DWORD cjInBufferSize,
+    _Out_opt_bytecap_(cjOutBufferSize) LPVOID lpOutBuffer,
+    _In_ DWORD cjOutBufferSize,
+    _Out_ LPDWORD lpBytesReturned);
 
 WIN32KAPI
 ULONG
 APIENTRY
 EngDitherColor(
-  IN HDEV  hdev,
-  IN ULONG  iMode,
-  IN ULONG  rgb,
-  OUT ULONG  *pul);
+    _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);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngEnumForms(
-  IN HANDLE  hPrinter,
-  IN DWORD  Level,
-  OUT LPBYTE  pForm,
-  IN DWORD  cbBuf,
-  OUT LPDWORD  pcbNeeded,
-  OUT LPDWORD  pcReturned);
+    _In_ HANDLE hPrinter,
+    _In_ DWORD Level,
+    _Out_writes_bytes_opt_(cbBuf) LPBYTE pForm,
+    _In_ DWORD cbBuf,
+    _Out_ LPDWORD pcbNeeded,
+    _Out_ LPDWORD pcReturned);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngEraseSurface(
-  IN SURFOBJ  *pso,
-  IN RECTL  *prcl,
-  IN ULONG  iColor);
+    _In_ SURFOBJ *pso,
+    _In_ RECTL *prcl,
+    _In_ ULONG iColor);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngFillPath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix,
-  IN FLONG  flOptions);
+    _Inout_ SURFOBJ *pso,
+    _In_ PATHOBJ *ppo,
+    _In_ CLIPOBJ *pco,
+    _In_ BRUSHOBJ *pbo,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ MIX mix,
+    _In_ FLONG flOptions);
 
 WIN32KAPI
 PVOID
 APIENTRY
 EngFindImageProcAddress(
-  IN HANDLE  hModule,
-  IN LPSTR  lpProcName);
+    _In_ HANDLE hModule,
+    _In_ LPSTR lpProcName);
 
 WIN32KAPI
 PVOID
 APIENTRY
 EngFindResource(
-  IN HANDLE  h,
-  IN int  iName,
-  IN int  iType,
-  OUT PULONG  pulSize);
-
+    _In_ HANDLE h,
+    _In_ INT iName,
+    _In_ INT iType,
+    _Out_ PULONG pulSize);
+
+_Must_inspect_result_
+_Ret_opt_bytecap_(cjSize)
 WIN32KAPI
 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
@@ -1580,166 +1590,163 @@
 VOID
 APIENTRY
 EngFntCacheFault(
-  IN ULONG  ulFastCheckSum,
-  IN ULONG  iFaultMode);
+    _In_ ULONG ulFastCheckSum,
+    _In_ ULONG iFaultMode);
 
 WIN32KAPI
 PVOID
 APIENTRY
 EngFntCacheLookUp(
-  IN ULONG  FastCheckSum,
-  OUT ULONG  *pulSize);
+    _In_ ULONG FastCheckSum,
+    _Out_ ULONG *pulSize);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngFreeMem(
-  IN PVOID  Mem);
+    _In_ _Post_ptr_invalid_ PVOID pv);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngFreeModule(
-  IN HANDLE  h);
+    _In_ HANDLE h);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngFreePrivateUserMem(
-  IN PDD_SURFACE_LOCAL  psl,
-  IN PVOID  pv);
+    _In_ PDD_SURFACE_LOCAL psl,
+    _In_ _Post_ptr_invalid_ PVOID  pv);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngFreeUserMem(
-  IN PVOID  pv);
+    _In_ _Post_ptr_invalid_ PVOID pv);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngGetCurrentCodePage(
-  OUT PUSHORT  OemCodePage,
-  OUT PUSHORT  AnsiCodePage);
+    _Out_ PUSHORT OemCodePage,
+    _Out_ PUSHORT AnsiCodePage);
 
 WIN32KAPI
 HANDLE
 APIENTRY
-EngGetCurrentProcessId(
-  VOID);
+EngGetCurrentProcessId(VOID);
 
 WIN32KAPI
 HANDLE
 APIENTRY
-EngGetCurrentThreadId(
-  VOID);
-
+EngGetCurrentThreadId(VOID);
+
+_Must_inspect_result_ _Ret_z_
 WIN32KAPI
 LPWSTR
 APIENTRY
 EngGetDriverName(
-  IN HDEV  hdev);
+    _In_ HDEV hdev);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngGetFileChangeTime(
-  IN HANDLE  h,
-  OUT LARGE_INTEGER  *pChangeTime);
+    _In_ HANDLE h,
+    _Out_ LARGE_INTEGER *pChangeTime);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngGetFilePath(
-  IN HANDLE  h,
-  OUT WCHAR  (*pDest)[MAX_PATH+1]);
+    _In_ HANDLE h,
+    _Out_ WCHAR (*pDest)[MAX_PATH+1]);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngGetForm(
-  IN HANDLE  hPrinter,
-  IN LPWSTR  pFormName,
-  IN DWORD  Level,
-  OUT LPBYTE  pForm,
-  IN DWORD  cbBuf,
-  OUT LPDWORD  pcbNeeded);
+    _In_ HANDLE hPrinter,
+    _In_ LPWSTR pFormName,
+    _In_ DWORD Level,
+    _In_reads_bytes_opt_(cbBuf) LPBYTE pForm,
+    _In_ DWORD cbBuf,
+    _Out_ LPDWORD pcbNeeded);
 
 WIN32KAPI
 ULONG
 APIENTRY
-EngGetLastError(
-  VOID);
+EngGetLastError(VOID);
 
 WIN32KAPI
 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
 DWORD
 APIENTRY
 EngGetPrinterData(
-  IN HANDLE  hPrinter,
-  IN LPWSTR  pValueName,
-  OUT LPDWORD  pType,
-  OUT LPBYTE  pData,
-  IN DWORD  nSize,
-  OUT LPDWORD  pcbNeeded);
+    _In_ HANDLE hPrinter,
+    _In_ LPWSTR pValueName,
+    _Out_opt_ LPDWORD pType,
+    _Out_writes_bytes_opt_(cjSize) LPBYTE pData,
+    _In_ DWORD cjSize,
+    _Out_ LPDWORD pcjNeeded);
 
 WIN32KAPI
 LPWSTR
 APIENTRY
 EngGetPrinterDataFileName(
-  IN HDEV  hdev);
+    _In_ HDEV hdev);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngGetPrinterDriver(
-  IN HANDLE  hPrinter,
-  IN LPWSTR  pEnvironment,
-  IN DWORD  dwLevel,
-  OUT BYTE  *lpbDrvInfo,
-  IN DWORD  cbBuf,
-  OUT DWORD  *pcbNeeded);
+    _In_ HANDLE hPrinter,
+    _In_opt_ LPWSTR pEnvironment,
+    _In_ DWORD dwLevel,
+    _Out_writes_bytes_opt_(cjBufSize) BYTE *lpbDrvInfo,
+    _In_ DWORD cjBufSize,
+    _Out_ DWORD *pcjNeeded);
 
 WIN32KAPI
 HANDLE
 APIENTRY
-EngGetProcessHandle(
-  VOID);
+EngGetProcessHandle(VOID);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngGetType1FontList(
-  IN HDEV  hdev,
-  OUT TYPE1_FONT  *pType1Buffer,
-  IN ULONG  cjType1Buffer,
-  OUT PULONG  pulLocalFonts,
-  OUT PULONG  pulRemoteFonts,
-  OUT LARGE_INTEGER  *pLastModified);
+    _In_ HDEV hdev,
+    _Out_writes_bytes_opt_(cjType1Buffer) TYPE1_FONT *pType1Buffer,
+    _In_ ULONG cjType1Buffer,
+    _Out_ PULONG pulLocalFonts,
+    _Out_ PULONG pulRemoteFonts,
+    _Out_ LARGE_INTEGER *pLastModified);
 
 WIN32KAPI
 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
@@ -1749,130 +1756,131 @@
 ULONG
 APIENTRY
 EngHangNotification(
-  IN HDEV  hDev,
-  IN PVOID  Reserved);
+    _In_ HDEV hDev,
+    _Reserved_ PVOID Reserved);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngInitializeSafeSemaphore(
-  OUT ENGSAFESEMAPHORE  *pssem);
+    _Out_ ENGSAFESEMAPHORE *pssem);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngIsSemaphoreOwned(
-  IN HSEMAPHORE  hsem);
+    _In_ HSEMAPHORE hsem);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngIsSemaphoreOwnedByCurrentThread(
-  IN HSEMAPHORE  hsem);
+    _In_ HSEMAPHORE hsem);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngLineTo(
-  SURFOBJ  *pso,
-  CLIPOBJ  *pco,
-  BRUSHOBJ  *pbo,
-  LONG  x1,
-  LONG  y1,
-  LONG  x2,
-  LONG  y2,
-  RECTL  *prclBounds,
-  MIX  mix);
+    _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);
 
 WIN32KAPI
 HANDLE
 APIENTRY
 EngLoadImage(
-  IN LPWSTR  pwszDriver);
+    _In_ LPWSTR pwszDriver);
 
 WIN32KAPI
 HANDLE
 APIENTRY
 EngLoadModule(
-  IN LPWSTR  pwsz);
+    _In_ LPWSTR pwsz);
 
 WIN32KAPI
 HANDLE
 APIENTRY
 EngLoadModuleForWrite(
-  IN LPWSTR  pwsz,
-  IN ULONG  cjSizeOfModule);
+    _In_ LPWSTR pwsz,
+    _In_ ULONG cjSizeOfModule);
 
 WIN32KAPI
 PDD_SURFACE_LOCAL
 APIENTRY
 EngLockDirectDrawSurface(
-  IN HANDLE  hSurface);
+    _In_ HANDLE hSurface);
 
 WIN32KAPI
 DRIVEROBJ*
 APIENTRY
 EngLockDriverObj(
-  IN HDRVOBJ  hdo);
+    _In_ HDRVOBJ hdo);
 
 WIN32KAPI
 SURFOBJ*
 APIENTRY
 EngLockSurface(
-  IN HSURF  hsurf);
-
-WIN32KAPI
-BOOL
-APIENTRY
-EngLpkInstalled(
-  VOID);
+    _In_ HSURF hsurf);
+
+WIN32KAPI
+BOOL
+APIENTRY
+EngLpkInstalled(VOID);
 
 WIN32KAPI
 PEVENT
 APIENTRY
 EngMapEvent(
-  IN HDEV  hDev,
-  IN HANDLE  hUserObject,
-  IN PVOID  Reserved1,
-  IN PVOID  Reserved2,
-  IN PVOID  Reserved3);
-
+    _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)))
 WIN32KAPI
 PVOID
 APIENTRY
 EngMapFile(
-  IN LPWSTR  pwsz,
-  IN ULONG  cjSize,
-  OUT ULONG_PTR  *piFile);
+    _In_ LPWSTR pwsz,
+    _In_ ULONG cjSize,
+    _Out_ ULONG_PTR *piFile);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngMapFontFile(
-  ULONG_PTR  iFile,
-  PULONG  *ppjBuf,
-  ULONG  *pcjBuf);
+    _In_ ULONG_PTR iFile,
+    _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
+    _Out_ ULONG *pcjBuf);
 
 WIN32KAPI
 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
 PVOID
 APIENTRY
 EngMapModule(
-  IN HANDLE  h,
-  OUT PULONG  pSize);
+    _In_ HANDLE h,
+    _Out_ PULONG pSize);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngMarkBandingSurface(
-  IN HSURF  hsurf);
+    _In_ HSURF hsurf);
 
 /* EngModifySurface.flSurface constants */
 #define MS_NOTSYSTEMMEMORY                0x00000001
@@ -1882,93 +1890,101 @@
 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);
+    _In_ HSURF hsurf,
+    _In_ HDEV hdev,
+    _In_ FLONG flHooks,
+    _In_ FLONG flSurface,
+    _In_ DHSURF dhsurf,
+    _In_ PVOID pvScan0,
+    _In_ LONG lDelta,
+    _Reserved_ PVOID pvReserved);
 
 WIN32KAPI
 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);
+
+WIN32KAPI
+INT
 APIENTRY
 EngMulDiv(
-  IN int  a,
-  IN int  b,
-  IN int  c);
+    _In_ INT a,
+    _In_ INT b,
+    _In_ INT c);
 
 WIN32KAPI
 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
 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
 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_ MIX mix);
 
 WIN32KAPI
 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);
+    _In_ SURFOBJ *psoTrg,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMsk,
+    _In_ CLIPOBJ *pco,
+    _In_ XLATEOBJ *pxlo,
+    _In_ COLORADJUSTMENT *pca,
+    _In_ POINTL *pptlBrushOrg,
+    _In_ POINTFIX *pptfx,
+    _In_ RECTL *prcl,
+    _When_(psoMsk, _In_) POINTL *pptl,
+    _In_ ULONG iMode);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngProbeForRead(
-  IN PVOID  Address,
-  IN ULONG  Length,
-  IN ULONG  Alignment);
+    _In_reads_bytes_(Length) PVOID Address,
+#if (NTDDI_VERSION <= NTDDI_WINXP)
+    _In_ ULONG  Length,
+#else
+    _In_ SIZE_T Length,
+#endif
+    _In_ ULONG Alignment);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngProbeForReadAndWrite(
-  IN PVOID  Address,
-  IN ULONG  Length,
-  IN ULONG  Alignment);
+    _Inout_updates_bytes_(Length) PVOID Address,
+#if (NTDDI_VERSION <= NTDDI_WINXP)
+    _In_ ULONG  Length,
+#else
+    _In_ SIZE_T Length,
+#endif
+    _In_ ULONG Alignment);
 
 typedef enum _ENG_DEVICE_ATTRIBUTE {
   QDA_RESERVED = 0,
@@ -1979,45 +1995,45 @@
 BOOL
 APIENTRY
 EngQueryDeviceAttribute(
-  IN HDEV  hdev,
-  IN ENG_DEVICE_ATTRIBUTE  devAttr,
-  IN VOID  *pvIn,
-  IN ULONG  ulInSize,
-  OUT VOID  *pvOut,
-  OUT ULONG  ulOutSize);
+    _In_ HDEV hdev,
+    _In_ ENG_DEVICE_ATTRIBUTE devAttr,
+    _In_reads_bytes_(cjInSize) PVOID pvIn,
+    _In_ ULONG cjInSize,
+    _Out_writes_bytes_(cjOutSize) PVOID pvOut,
+    _Out_ ULONG cjOutSize);
 
 WIN32KAPI
 LARGE_INTEGER
 APIENTRY
 EngQueryFileTimeStamp(
-  IN LPWSTR  pwsz);
+    _In_ LPWSTR pwsz);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngQueryLocalTime(
-  OUT PENG_TIME_FIELDS  ptf);
+    _Out_ PENG_TIME_FIELDS ptf);
 
 WIN32KAPI
 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
 VOID
 APIENTRY
 EngQueryPerformanceCounter(
-  OUT LONGLONG  *pPerformanceCount);
+    _Out_ LONGLONG *pPerformanceCount);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngQueryPerformanceFrequency(
-  OUT LONGLONG  *pFrequency);
+    _Out_ LONGLONG *pFrequency);
 
 typedef enum _ENG_SYSTEM_ATTRIBUTE {
   EngProcessorFeature = 1,
@@ -2034,87 +2050,87 @@
 BOOL
 APIENTRY
 EngQuerySystemAttribute(
-  IN ENG_SYSTEM_ATTRIBUTE  CapNum,
-  OUT PDWORD  pCapability);
+    _In_ ENG_SYSTEM_ATTRIBUTE CapNum,
+    _Out_ PDWORD pCapability);
 
 WIN32KAPI
 LONG
 APIENTRY
 EngReadStateEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngReleaseSemaphore(
-  IN HSEMAPHORE  hsem);
+    _In_ HSEMAPHORE hsem);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngRestoreFloatingPointState(
-  IN VOID  *pBuffer);
+    _In_ VOID *pBuffer);
 
 WIN32KAPI
 ULONG
 APIENTRY
 EngSaveFloatingPointState(
-  OUT VOID  *pBuffer,
-  IN ULONG  cjBufferSize);
+    _Out_ VOID *pBuffer,
+    _In_ ULONG cjBufferSize);
 
 WIN32KAPI
 HANDLE
 APIENTRY
 EngSecureMem(
-  IN PVOID  Address,
-  IN ULONG  Length);
+    _In_reads_bytes_(cjLength) PVOID Address,
+    _In_ ULONG cjLength);
 
 WIN32KAPI
 LONG
 APIENTRY
 EngSetEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngSetLastError(
-  IN ULONG  iError);
+    _In_ ULONG iError);
 
 WIN32KAPI
 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);
+    _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
 BOOL
 APIENTRY
 EngSetPointerTag(
-  IN HDEV  hdev,
-  IN SURFOBJ  *psoMask,
-  IN SURFOBJ  *psoColor,
-  IN XLATEOBJ  *pxlo,
-  IN FLONG  fl);
+    _In_ HDEV hdev,
+    _In_ SURFOBJ *psoMask,
+    _In_ SURFOBJ *psoColor,
+    _In_ XLATEOBJ *pxlo,
+    _In_ FLONG fl);
 
 WIN32KAPI
 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);
 
 typedef int (CDECL *SORTCOMP)(const void *pv1, const void *pv2);
 
@@ -2122,349 +2138,349 @@
 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
 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);
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_ CLIPOBJ *pco,
+    _In_ XLATEOBJ *pxlo,
+    _In_ COLORADJUSTMENT *pca,
+    _In_ POINTL *pptlHTOrg,
+    _In_ RECTL *prclDest,
+    _In_ RECTL *prclSrc,
+    _When_(psoMask, _In_) POINTL *pptlMask,
+    _In_ ULONG iMode);
 
 WIN32KAPI
 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);
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_opt_ SURFOBJ *psoMask,
+    _In_ CLIPOBJ *pco,
+    _In_ XLATEOBJ *pxlo,
+    _In_ 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);
 
 WIN32KAPI
 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);
+    _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_ MIX mixFill,
+    _In_ FLONG flOptions);
 
 WIN32KAPI
 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);
+    _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
 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);
+    _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);
 
 WIN32KAPI
 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);
+    _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
 VOID
 APIENTRY
 EngUnicodeToMultiByteN(
-  OUT PCHAR  MultiByteString,
-  IN ULONG  MaxBytesInMultiByteString,
-  OUT PULONG  BytesInMultiByteString,
-  IN PWSTR  UnicodeString,
-  IN ULONG  BytesInUnicodeString);
+    _Out_writes_bytes_to_(cjMultiByteBuf, *pcjMultiByteString) PCHAR pchMultiByteString,
+    _In_ ULONG cjMultiByteBuf,
+    _Out_opt_ PULONG pcjMultiByteString,
+    _In_reads_bytes_(cjUnicodeString) PWSTR pwszUnicodeString,
+    _In_ ULONG cjUnicodeString);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngUnloadImage(
-  IN HANDLE  hModule);
+    _In_ HANDLE hModule);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngUnlockDirectDrawSurface(
-  IN PDD_SURFACE_LOCAL  pSurface);
+    _In_ PDD_SURFACE_LOCAL pSurface);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngUnlockDriverObj(
-  IN HDRVOBJ  hdo);
+    _In_ HDRVOBJ hdo);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngUnlockSurface(
-  IN SURFOBJ  *pso);
+    _In_ SURFOBJ *pso);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngUnmapEvent(
-  IN PEVENT  pEvent);
+    _In_ PEVENT pEvent);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngUnmapFile(
-  IN ULONG_PTR  iFile);
+    _In_ ULONG_PTR iFile);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngUnmapFontFile(
-  ULONG_PTR  iFile);
+    _In_ ULONG_PTR iFile);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngUnmapFontFileFD(
-  IN ULONG_PTR  iFile);
+    _In_ ULONG_PTR iFile);
 
 WIN32KAPI
 VOID
 APIENTRY
 EngUnsecureMem(
-  IN HANDLE  hSecure);
+    _In_ HANDLE hSecure);
 
 WIN32KAPI
 BOOL
 APIENTRY
 EngWaitForSingleObject(
-  IN PEVENT  pEvent,
-  IN PLARGE_INTEGER  pTimeOut);
+    _In_ PEVENT pEvent,
+    _In_ PLARGE_INTEGER pTimeOut);
 
 WIN32KAPI
 INT
 APIENTRY
 EngWideCharToMultiByte(
-  IN UINT  CodePage,
-  IN LPWSTR  WideCharString,
-  IN INT  BytesInWideCharString,
-  OUT LPSTR  MultiByteString,
-  IN INT  BytesInMultiByteString);
+    _In_ UINT CodePage,
+    _In_reads_bytes_opt_(cjWideCharString) LPWSTR pwszWideCharString,
+    _In_ INT cjWideCharString,
+    _Out_z_bytecap_(cjMultiByteString) LPSTR pszMultiByteString,
+    _In_ INT cjMultiByteString);
 
 WIN32KAPI
 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);
 
 #if defined(_X86_) && !defined(USERMODE_DRIVER)
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_Add(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_AddFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_AddLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_Div(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_DivFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_DivLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 WIN32KAPI
 BOOL
 APIENTRY
 FLOATOBJ_Equal(
-  IN PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _In_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
 WIN32KAPI
 BOOL
 APIENTRY
 FLOATOBJ_EqualLong(
-  IN PFLOATOBJ  pf,
-  IN LONG  l);
+    _In_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 WIN32KAPI
 LONG
 APIENTRY
 FLOATOBJ_GetFloat(
-  IN PFLOATOBJ  pf);
+    _In_ PFLOATOBJ pf);
 
 WIN32KAPI
 LONG
 APIENTRY
 FLOATOBJ_GetLong(
-  IN PFLOATOBJ  pf);
+    _In_ PFLOATOBJ pf);
 
 WIN32KAPI
 BOOL
 APIENTRY
 FLOATOBJ_GreaterThan(
-  IN PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _In_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
 WIN32KAPI
 BOOL
 APIENTRY
 FLOATOBJ_GreaterThanLong(
-  IN PFLOATOBJ  pf,
-  IN LONG  l);
+    _In_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 WIN32KAPI
 BOOL
 APIENTRY
 FLOATOBJ_LessThan(
-  IN PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _In_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
 WIN32KAPI
 BOOL
 APIENTRY
 FLOATOBJ_LessThanLong(
-  IN PFLOATOBJ  pf,
-  IN LONG  l);
+    _In_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_Mul(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_MulFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_MulLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_Neg(
-  IN OUT PFLOATOBJ  pf);
+    _Inout_ PFLOATOBJ pf);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_SetFloat(
-  OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Out_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_SetLong(
-  OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Out_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_Sub(
-  IN OUT PFLOATOBJ  pf,
-  IN PFLOATOBJ  pf1);
+    _Inout_ PFLOATOBJ pf,
+    _In_ PFLOATOBJ pf1);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_SubFloat(
-  IN OUT PFLOATOBJ  pf,
-  IN FLOATL  f);
+    _Inout_ PFLOATOBJ pf,
+    _In_ FLOATL f);
 
 WIN32KAPI
 VOID
 APIENTRY
 FLOATOBJ_SubLong(
-  IN OUT PFLOATOBJ  pf,
-  IN LONG  l);
+    _Inout_ PFLOATOBJ pf,
+    _In_ LONG l);
 
 #else
 
@@ -2498,73 +2514,75 @@
 ULONG
 APIENTRY
 FONTOBJ_cGetAllGlyphHandles(
-  IN FONTOBJ  *pfo,
-  OUT HGLYPH  *phg);
+    _In_ FONTOBJ *pfo,
+    _Out_opt_bytecap_(return) HGLYPH *phg);
 
 WIN32KAPI
 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
 FD_GLYPHSET*
 APIENTRY
 FONTOBJ_pfdg(
-  IN FONTOBJ  *pfo);
+    _In_ FONTOBJ *pfo);
 
 WIN32KAPI
 IFIMETRICS*
 APIENTRY
 FONTOBJ_pifi(
-  IN FONTOBJ  *pfo);
-
+    _In_ FONTOBJ *pfo);
+
+_Ret_opt_bytecount_(*pcjTable)
 WIN32KAPI
 PBYTE
 APIENTRY
 FONTOBJ_pjOpenTypeTablePointer(
-  IN FONTOBJ  *pfo,
-  IN ULONG  ulTag,
-  OUT ULONG  *pcjTable);
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG ulTag,
+    _Out_ ULONG *pcjTable);
 
 WIN32KAPI
 PFD_GLYPHATTR
 APIENTRY
 FONTOBJ_pQueryGlyphAttrs(
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode);
-
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode);
+
+_Ret_opt_bytecount_(*pcjFile)
 WIN32KAPI
 PVOID
 APIENTRY
 FONTOBJ_pvTrueTypeFontFile(
-  IN FONTOBJ  *pfo,
-  OUT ULONG  *pcjFile);
+    _In_ FONTOBJ *pfo,
+    _Out_ ULONG *pcjFile);
 
 WIN32KAPI
 LPWSTR
 APIENTRY
 FONTOBJ_pwszFontFilePaths(
-  IN FONTOBJ  *pfo,
-  OUT ULONG  *pcwc);
+    _In_ FONTOBJ *pfo,
+    _Out_ ULONG *pcwc);
 
 WIN32KAPI
 XFORMOBJ*
 APIENTRY
 FONTOBJ_pxoGetXform(
-  IN FONTOBJ  *pfo);
+    _In_ FONTOBJ *pfo);
 
 WIN32KAPI
 VOID
 APIENTRY
 FONTOBJ_vGetInfo(
-  IN FONTOBJ  *pfo,
-  IN ULONG  cjSize,
-  OUT FONTINFO  *pfi);
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG cjSize,
+    _Out_bytecap_(cjSize) FONTINFO *pfi);
 
 
 
@@ -2572,187 +2590,187 @@
 LONG
 APIENTRY
 HT_ComputeRGBGammaTable(
-  IN USHORT  GammaTableEntries,
-  IN USHORT  GammaTableType,
-  IN USHORT  RedGamma,
-  IN USHORT  GreenGamma,
-  IN USHORT  BlueGamma,
-  OUT LPBYTE  pGammaTable);
+    _In_ USHORT GammaTableEntries,
+    _In_ USHORT GammaTableType,
+    _In_ USHORT RedGamma,
+    _In_ USHORT GreenGamma,
+    _In_ USHORT BlueGamma,
+    _Out_writes_bytes_(GammaTableEntries * 3) LPBYTE pGammaTable);
 
 WIN32KAPI
 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
 LONG
 APIENTRY
 HT_Get8BPPMaskPalette(
-  IN OUT LPPALETTEENTRY  pPaletteEntry,
-  IN BOOL  Use8BPPMaskPal,
-  IN BYTE  CMYMask,
-  IN USHORT  RedGamma,
-  IN USHORT  GreenGamma,
-  IN USHORT  BlueGamma);
+    _Out_opt_ LPPALETTEENTRY pPaletteEntry,
+    _In_ BOOL Use8BPPMaskPal,
+    _In_ BYTE CMYMask,
+    _In_ USHORT RedGamma,
+    _In_ USHORT GreenGamma,
+    _In_ USHORT BlueGamma);
 
 WIN32KAPI
 LONG
 APIENTRY
 HTUI_DeviceColorAdjustment(
-  IN LPSTR  pDeviceName,
-  OUT PDEVHTADJDATA  pDevHTAdjData);
+    _In_ LPSTR pDeviceName,
+    _Out_ PDEVHTADJDATA pDevHTAdjData);
 
 WIN32KAPI
 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
 BOOL
 APIENTRY
 PATHOBJ_bCloseFigure(
-  IN PATHOBJ  *ppo);
+    _In_ PATHOBJ *ppo);
 
 WIN32KAPI
 BOOL
 APIENTRY
 PATHOBJ_bEnum(
-  IN PATHOBJ  *ppo,
-  OUT PATHDATA  *ppd);
+    _In_ PATHOBJ *ppo,
+    _Out_ PATHDATA *ppd);
 
 WIN32KAPI
 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
 BOOL
 APIENTRY
 PATHOBJ_bMoveTo(
-  IN PATHOBJ  *ppo,
-  IN POINTFIX  ptfx);
+    _In_ PATHOBJ *ppo,
+    _In_ POINTFIX ptfx);
 
 WIN32KAPI
 BOOL
 APIENTRY
 PATHOBJ_bPolyBezierTo(
-  IN PATHOBJ  *ppo,
-  IN POINTFIX  *pptfx,
-  IN ULONG  cptfx);
+    _In_ PATHOBJ *ppo,
+    _In_ POINTFIX *pptfx,
+    _In_ ULONG cptfx);
 
 WIN32KAPI
 BOOL
 APIENTRY
 PATHOBJ_bPolyLineTo(
-  IN PATHOBJ  *ppo,
-  IN POINTFIX  *pptfx,
-  IN ULONG  cptfx);
+    _In_ PATHOBJ *ppo,
+    _In_ POINTFIX *pptfx,
+    _In_ ULONG cptfx);
 
 WIN32KAPI
 VOID
 APIENTRY
 PATHOBJ_vEnumStart(
-  IN PATHOBJ  *ppo);
+    _Inout_ PATHOBJ *ppo);
 
 WIN32KAPI
 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
 VOID
 APIENTRY
 PATHOBJ_vGetBounds(
-  IN PATHOBJ  *ppo,
-  OUT PRECTFX  prectfx);
+    _In_ PATHOBJ *ppo,
+    _Out_ PRECTFX prectfx);
 
 WIN32KAPI
 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
 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
 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
 DWORD
 APIENTRY
 STROBJ_dwGetCodePage(
-  IN STROBJ  *pstro);
+    _In_ STROBJ *pstro);
 
 WIN32KAPI
 FIX
 APIENTRY
 STROBJ_fxBreakExtra(
-  IN STROBJ  *pstro);
+    _In_ STROBJ *pstro);
 
 WIN32KAPI
 FIX
 APIENTRY
 STROBJ_fxCharacterExtra(
-  IN STROBJ  *pstro);
+    _In_ STROBJ *pstro);
 
 WIN32KAPI
 VOID
 APIENTRY
 STROBJ_vEnumStart(
-  IN STROBJ  *pstro);
+    _In_ STROBJ *pstro);
 
 WIN32KAPI
 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
 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
 VOID
 APIENTRY
 WNDOBJ_vSetConsumer(
-  IN WNDOBJ  *pwo,
-  IN PVOID  pvConsumer);
+    _Inout_ WNDOBJ *pwo,
+    _In_ PVOID pvConsumer);
 
 /* XFORMOBJ_bApplyXform.iMode constants */
 #define XF_LTOL                           0L
@@ -2764,25 +2782,25 @@
 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);
 
 WIN32KAPI
 ULONG
 APIENTRY
 XFORMOBJ_iGetFloatObjXform(
-  IN XFORMOBJ  *pxo,
-  OUT FLOATOBJ_XFORM  *pxfo);
+    _In_ XFORMOBJ *pxo,
+    _Out_ FLOATOBJ_XFORM *pxfo);
 
 WIN32KAPI
 ULONG
 APIENTRY
 XFORMOBJ_iGetXform(
-  IN XFORMOBJ  *pxo,
-  OUT XFORML  *pxform);
+    _In_ XFORMOBJ *pxo,
+    _Out_ XFORML *pxform);
 
 /* XLATEOBJ_cGetPalette.iPal constants */
 #define XO_SRCPALETTE                     1
@@ -2795,424 +2813,465 @@
 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
 HANDLE
 APIENTRY
 XLATEOBJ_hGetColorTransform(
-  IN XLATEOBJ  *pxlo);
+    _In_ XLATEOBJ *pxlo);
 
 WIN32KAPI
 ULONG
 APIENTRY
 XLATEOBJ_iXlate(
-  IN XLATEOBJ  *pxlo,
-  IN ULONG  iColor);
+    _In_ XLATEOBJ *pxlo,
+    _In_ ULONG iColor);
 
 WIN32KAPI
 ULONG*
 APIENTRY
 XLATEOBJ_piVector(
-  IN XLATEOBJ  *pxlo);
-
+    _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);
-
-HBITMAP
-APIENTRY
-DrvCreateDeviceBitmap(
-  IN DHPDEV  dhpdev,
-  IN SIZEL  sizl,
-  IN ULONG  iFormat);
-
-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);
-
-VOID
-APIENTRY
-DrvDestroyFont(
-  IN FONTOBJ  *pfo);
-
-VOID
-APIENTRY
-DrvDisableDriver(
-  VOID);
-
-VOID
-APIENTRY
-DrvDisablePDEV(
-  IN DHPDEV  dhpdev);
-
-VOID
-APIENTRY
-DrvDisableSurface(
-  IN DHPDEV  dhpdev);
+typedef BOOL
+(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 FN_DrvAssertMode)(
+    _In_ DHPDEV dhpdev,
+    _In_ BOOL bEnable);
+typedef FN_DrvAssertMode *PFN_DrvAssertMode;
+extern FN_DrvAssertMode DrvAssertMode;
+
+typedef BOOL
+(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 FN_DrvCompletePDEV)(
+    _In_ DHPDEV dhpdev,
+    _In_ HDEV hdev);
+typedef FN_DrvCompletePDEV *PFN_DrvCompletePDEV;
+extern FN_DrvCompletePDEV DrvCompletePDEV;
+
+typedef BOOL
+(APIENTRY FN_DrvCopyBits)(
+    _In_ SURFOBJ *psoDest,
+    _In_ SURFOBJ *psoSrc,
+    _In_ CLIPOBJ *pco,
+    _In_ XLATEOBJ *pxlo,
+    _In_ RECTL *prclDest,
+    _In_ POINTL *pptlSrc);
+typedef FN_DrvCopyBits *PFN_DrvCopyBits;
+extern FN_DrvCopyBits DrvCopyBits;
+
+typedef HBITMAP
+(APIENTRY FN_DrvCreateDeviceBitmap)(
+    _In_ DHPDEV  dhpdev,
+    _In_ SIZEL  sizl,
+    _In_ ULONG  iFormat);
+typedef FN_DrvCreateDeviceBitmap *PFN_DrvCreateDeviceBitmap;
+extern FN_DrvCreateDeviceBitmap DrvCreateDeviceBitmap;
+
+typedef VOID
+(APIENTRY FN_DrvDeleteDeviceBitmap)(
+    _In_ DHSURF  dhsurf);
+typedef FN_DrvDeleteDeviceBitmap *PFN_DrvDeleteDeviceBitmap;
+extern FN_DrvDeleteDeviceBitmap DrvDeleteDeviceBitmap;
+
+typedef HBITMAP
+(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 FN_DrvDescribePixelFormat)(
+    _In_ DHPDEV dhpdev,
+    _In_ LONG iPixelFormat,
+    _In_ ULONG cjpfd,
+    _Out_ PIXELFORMATDESCRIPTOR *ppfd);
+typedef FN_DrvDescribePixelFormat *PFN_DrvDescribePixelFormat;
+extern FN_DrvDescribePixelFormat DrvDescribePixelFormat;
+
+typedef VOID
+(APIENTRY FN_DrvDestroyFont)(
+    _In_ FONTOBJ *pfo);
+typedef FN_DrvDestroyFont *PFN_DrvDestroyFont;
+extern FN_DrvDestroyFont DrvDestroyFont;
+
+typedef VOID
+(APIENTRY FN_DrvDisableDriver)(VOID);
+typedef FN_DrvDisableDriver *PFN_DrvDisableDriver;
+extern FN_DrvDisableDriver DrvDisableDriver;
+
+typedef VOID
+(APIENTRY FN_DrvDisablePDEV)(
+    _In_ DHPDEV dhpdev);
+typedef FN_DrvDisablePDEV *PFN_DrvDisablePDEV;
+extern FN_DrvDisablePDEV DrvDisablePDEV;
+
+typedef VOID
+(APIENTRY FN_DrvDisableSurface)(
+    _In_ DHPDEV dhpdev);
+typedef FN_DrvDisableSurface *PFN_DrvDisableSurface;
+extern FN_DrvDisableSurface DrvDisableSurface;
 
 #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);
+typedef ULONG
+(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 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 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 FN_DrvEnableSurface)(
+    _In_ DHPDEV dhpdev);
+typedef FN_DrvEnableSurface *PFN_DrvEnableSurface;
+extern FN_DrvEnableSurface DrvEnableSurface;
 
 /* 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
-APIENTRY
-DrvFillPath(
-  IN SURFOBJ  *pso,
-  IN PATHOBJ  *ppo,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix,
-  IN FLONG  flOptions);
-
-ULONG
-APIENTRY
-DrvFontManagement(
-  IN SURFOBJ  *pso,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn,
-  IN ULONG  cjOut,
-  OUT PVOID  pvOut);
-
-VOID
-APIENTRY
-DrvFree(
-  IN PVOID  pv,
-  IN ULONG_PTR  id);
+typedef BOOL
+(APIENTRY FN_DrvEndDoc)(
+    _In_ SURFOBJ *pso,
+    _In_ FLONG fl);
+typedef FN_DrvEndDoc *PFN_DrvEndDoc;
+extern FN_DrvEndDoc DrvEndDoc;
+
+typedef ULONG
+(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 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 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 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
 
-ULONG
-APIENTRY
-DrvGetGlyphMode(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo);
-
-ULONG
-APIENTRY
-DrvGetModes(
-  IN HANDLE  hDriver,
-  IN ULONG  cjSize,
-  OUT DEVMODEW  *pdm);
-
-PVOID
-APIENTRY
-DrvGetTrueTypeFile(
-  IN ULONG_PTR  iFile,
-  IN ULONG  *pcj);
-
-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);
-
-BOOL
-APIENTRY
-DrvIcmCheckBitmapBits(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hColorTransform,
-  IN SURFOBJ  *pso,
-  OUT PBYTE  paResults);
-
-HANDLE
-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);
-
-BOOL
-APIENTRY
-DrvIcmDeleteColorTransform(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hcmXform);
+typedef ULONG
+(APIENTRY FN_DrvGetGlyphMode)(
+    _In_ DHPDEV dhpdev,
+    _In_ FONTOBJ *pfo);
+typedef FN_DrvGetGlyphMode *PFN_DrvGetGlyphMode;
+extern FN_DrvGetGlyphMode DrvGetGlyphMode;
+
+typedef ULONG
+(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 FN_DrvGetTrueTypeFile)(
+    _In_ ULONG_PTR iFile,
+    _In_ ULONG *pcj);
+typedef FN_DrvGetTrueTypeFile *PFN_DrvGetTrueTypeFile;
+extern FN_DrvGetTrueTypeFile DrvGetTrueTypeFile;
+
+typedef BOOL
+(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 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 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 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
 
-BOOL
-APIENTRY
-DrvIcmSetDeviceGammaRamp(
-  IN DHPDEV  dhpdev,
-  IN ULONG  iFormat,
-  IN LPVOID  lpRamp);
-
-BOOL
-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);
-
-VOID
-APIENTRY
-DrvMovePointer(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl);
-
-BOOL
-APIENTRY
-DrvNextBand(
-  IN SURFOBJ  *pso,
-  IN POINTL  *pptl);
-
-VOID
-APIENTRY
-DrvNotify(
-  IN SURFOBJ  *pso,
-  IN ULONG  iType,
-  IN PVOID  pvData);
-
-BOOL
-APIENTRY
-DrvOffset(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN FLONG  flReserved);
-
-BOOL
-APIENTRY
-DrvPaint(
-  IN SURFOBJ  *pso,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix);
-
-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);
+typedef BOOL
+(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 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 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 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 FN_DrvNextBand)(
+    _In_ SURFOBJ *pso,
+    _In_ POINTL *pptl);
+typedef FN_DrvNextBand *PFN_DrvNextBand;
+extern FN_DrvNextBand DrvNextBand;
+
+typedef VOID
+(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 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 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 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
 
-BOOL
-APIENTRY
-DrvQueryAdvanceWidths(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN HGLYPH  *phg,
-  OUT PVOID  pvWidths,
-  IN ULONG  cGlyphs);
+typedef BOOL
+(APIENTRY FN_DrvQueryAdvanceWidths)(
+    _In_ DHPDEV dhpdev,
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode,
+    _In_count_(cGlyphs) HGLYPH *phg,
+    _Out_bytecap_(cGlyphs * sizeof(USHORT)) PVOID pvWidths, // CHECKME
+    _In_ ULONG cGlyphs);
+typedef FN_DrvQueryAdvanceWidths *PFN_DrvQueryAdvanceWidths;
+extern FN_DrvQueryAdvanceWidths DrvQueryAdvanceWidths;
 
 /* 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);
+typedef BOOL
+(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
 
-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);
+typedef BOOL
+(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 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
@@ -3221,11 +3280,12 @@
 
 #define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
 
-LONG
-APIENTRY
-DrvQueryFontCaps(
-  IN ULONG  culCaps,
-  OUT ULONG  *pulCaps);
+typedef LONG
+(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
@@ -3239,28 +3299,30 @@
 
 #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);
+typedef LONG
+(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
 
-LONG
-APIENTRY
-DrvQueryFontFile(
-  IN ULONG_PTR  iFile,
-  IN ULONG  ulMode,
-  IN ULONG  cjBuf,
-  IN ULONG  *pulBuf);
+typedef LONG
+(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
@@ -3268,119 +3330,135 @@
 #define QFT_KERNPAIRS                     2L
 #define QFT_GLYPHSET                      3L
 
-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);
+typedef PVOID
+(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 FN_DrvQueryGlyphAttrs)(
+    _In_ FONTOBJ *pfo,
+    _In_ ULONG iMode);
+typedef FN_DrvQueryGlyphAttrs *PFN_DrvQueryGlyphAttrs;
+extern FN_DrvQueryGlyphAttrs DrvQueryGlyphAttrs;
+
+typedef ULONG
+(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
 
-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);
+typedef LONG
+(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 FN_DrvQueryTrueTypeTable)(
+    _In_ ULONG_PTR iFile,
+    _In_ ULONG ulFont,
+    _In_ ULONG ulTag,
+    _In_ PTRDIFF dpStart,
+    _In_ ULONG cjBuf,
+    _Out_opt_bytecap_(cjBuf) BYTE *pjBuf,
+    _Out_opt_ 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
 
-BOOL
-APIENTRY
-DrvRealizeBrush(
-  IN BRUSHOBJ  *pbo,
-  IN SURFOBJ  *psoTarget,
-  IN SURFOBJ  *psoPattern,
-  IN SURFOBJ  *psoMask,
-  IN XLATEOBJ  *pxlo,
-  IN ULONG  iHatch);
+typedef BOOL
+(APIENTRY FN_DrvRealizeBrush)(
+    _In_ BRUSHOBJ *pbo,
+    _Inout_ SURFOBJ *psoTarget, // CHECKME
+    _In_ SURFOBJ *psoPattern,
+    _In_ SURFOBJ *psoMask,
+    _In_ 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
 
-ULONG
-APIENTRY
-DrvResetDevice(
-  IN DHPDEV dhpdev,
-  IN PVOID Reserved);
-
-BOOL
-APIENTRY
-DrvResetPDEV(
-  DHPDEV  dhpdevOld,
-  DHPDEV  dhpdevNew);
+typedef ULONG
+(APIENTRY FN_DrvResetDevice)(
+    _In_ DHPDEV dhpdev,
+    _Reserved_ PVOID Reserved);
+typedef FN_DrvResetDevice *PFN_DrvResetDevice;
+extern FN_DrvResetDevice DrvResetDevice;
+
+typedef BOOL
+(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
 
-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);
+typedef ULONG_PTR
+(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 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 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 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
@@ -3398,761 +3476,198 @@
 #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
-APIENTRY
-DrvStartPage(
-  IN SURFOBJ  *pso);
-
-BOOL
-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);
-
-BOOL
-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);
-
-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);
-
-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);
-
-BOOL
-APIENTRY
-DrvSwapBuffers(
-  IN SURFOBJ  *pso,
-  IN WNDOBJ  *pwo);
-
-VOID
-APIENTRY
-DrvSynchronize(
-  IN DHPDEV  dhpdev,
-  IN RECTL  *prcl);
+typedef ULONG
+(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 FN_DrvStartBanding)(
+    _In_ SURFOBJ *pso,
+    _In_ POINTL *pptl);
+typedef FN_DrvStartBanding *PFN_DrvStartBanding;
+extern FN_DrvStartBanding DrvStartBanding;
+
+typedef BOOL
+(APIENTRY FN_DrvStartDoc)(
+    _In_ SURFOBJ *pso,
+    _In_ LPWSTR pwszDocName,
+    _In_ DWORD dwJobId);
+typedef FN_DrvStartDoc *PFN_DrvStartDoc;
+extern FN_DrvStartDoc DrvStartDoc;
+
+typedef BOOL
+(APIENTRY FN_DrvStartPage)(
+    _In_ SURFOBJ *pso);
+typedef FN_DrvStartPage *PFN_DrvStartPage;
+extern FN_DrvStartPage DrvStartPage;
+
+typedef BOOL
+(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 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 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 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 FN_DrvSwapBuffers)(
+    _In_ SURFOBJ *pso,
+    _In_ WNDOBJ *pwo);
+typedef FN_DrvSwapBuffers *PFN_DrvSwapBuffers;
+extern FN_DrvSwapBuffers DrvSwapBuffers;
+
+typedef VOID
+(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
 
-VOID
-APIENTRY
-DrvSynchronizeSurface(
-  IN SURFOBJ  *pso,
-  IN RECTL  *prcl,
-  IN FLONG  fl);
-
-BOOL
-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);
-
-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);
-
-BOOL
-APIENTRY
-DrvUnloadFontFile(
-  IN ULONG_PTR  iFile);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvAssertMode)(
-  IN DHPDEV  dhpdev,
-  IN BOOL  bEnable);
-
-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);
-
 typedef VOID
-(APIENTRY *PFN_DrvCompletePDEV)(
-  IN DHPDEV  dhpdev,
-  IN HDEV  hdev);
-
-typedef BOOL
-(APIENTRY *PFN_DrvCopyBits)(
-  IN SURFOBJ  *psoDest,
-  IN SURFOBJ  *psoSrc,
-  IN CLIPOBJ  *pco,
-  IN XLATEOBJ  *pxlo,
-  IN RECTL  *prclDest,
-  IN POINTL  *pptlSrc);
-
-typedef HBITMAP
-(APIENTRY *PFN_DrvCreateDeviceBitmap)(
-  IN DHPDEV  dhpdev,
-  IN SIZEL  sizl,
-  IN ULONG  iFormat);
+(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 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 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 FN_DrvUnloadFontFile)(
+    _In_ ULONG_PTR iFile);
+typedef FN_DrvUnloadFontFile *PFN_DrvUnloadFontFile;
+extern FN_DrvUnloadFontFile DrvUnloadFontFile;
+
+/* Direct draw */
 
 typedef VOID
-(APIENTRY *PFN_DrvDeleteDeviceBitmap)(
-  IN DHSURF  dhsurf);
-
-typedef HBITMAP
-(APIENTRY *PFN_DrvDeriveSurface)(
-  DD_DIRECTDRAW_GLOBAL  *pDirectDraw,
-  DD_SURFACE_LOCAL  *pSurface);
-
-typedef LONG
-(APIENTRY *PFN_DrvDescribePixelFormat)(
-  IN DHPDEV  dhpdev,
-  IN LONG  iPixelFormat,
-  IN ULONG  cjpfd,
-  OUT PIXELFORMATDESCRIPTOR  *ppfd);
-
-typedef VOID
-(APIENTRY *PFN_DrvDestroyFont)(
-  IN FONTOBJ  *pfo);
-
-typedef VOID
-(APIENTRY *PFN_DrvDisableDriver)(
-  VOID);
-
-typedef VOID
-(APIENTRY *PFN_DrvDisablePDEV)(
-  IN DHPDEV  dhpdev);
-
-typedef VOID
-(APIENTRY *PFN_DrvDisableSurface)(
-  IN DHPDEV  dhpdev);
-
-typedef ULONG
-(APIENTRY *PFN_DrvDitherColor)(
-  IN DHPDEV  dhpdev,
-  IN ULONG  iMode,
-  IN ULONG  rgb,
-  OUT ULONG  *pul);
-
-typedef ULONG
-(APIENTRY *PFN_DrvDrawEscape)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iEsc,
-  IN CLIPOBJ  *pco,
-  IN RECTL  *prcl,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn);
-
-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);
-
-typedef HSURF
-(APIENTRY *PFN_DrvEnableSurface)(
-  IN DHPDEV  dhpdev);
-
-typedef BOOL
-(APIENTRY *PFN_DrvEndDoc)(
-  IN SURFOBJ  *pso,
-  IN FLONG  fl);
-
-typedef ULONG
-(APIENTRY *PFN_DrvEscape)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iEsc,
-  IN ULONG  cjIn,
-  IN PVOID  pvIn,
-  IN ULONG  cjOut,
-  OUT PVOID  pvOut);
-
-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);
-
-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);
-
-typedef VOID
-(APIENTRY *PFN_DrvFree)(
-  IN PVOID  pv,
-  IN ULONG_PTR  id);
-
-typedef ULONG
-(APIENTRY *PFN_DrvGetGlyphMode)(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo);
-
-typedef ULONG
-(APIENTRY *PFN_DrvGetModes)(
-  IN HANDLE  hDriver,
-  IN ULONG  cjSize,
-  OUT DEVMODEW  *pdm);
-
-typedef PVOID
-(APIENTRY *PFN_DrvGetTrueTypeFile)(
-  IN ULONG_PTR  iFile,
-  IN ULONG  *pcj);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvIcmCheckBitmapBits)(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hColorTransform,
-  IN SURFOBJ  *pso,
-  OUT PBYTE  paResults);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvIcmDeleteColorTransform)(
-  IN DHPDEV  dhpdev,
-  IN HANDLE  hcmXform);
-
-typedef BOOL
-(APIENTRY *PFN_DrvIcmSetDeviceGammaRamp)(
-  IN DHPDEV  dhpdev,
-  IN ULONG  iFormat,
-  IN LPVOID  lpRamp);
-
-typedef BOOL
-(APIENTRY *PFN_DrvLineTo)(
-  SURFOBJ  *pso,
-  CLIPOBJ  *pco,
-  BRUSHOBJ  *pbo,
-  LONG  x1,
-  LONG  y1,
-  LONG  x2,
-  LONG  y2,
-  RECTL  *prclBounds,
-  MIX  mix);
-
-typedef ULONG_PTR
-(APIENTRY *PFN_DrvLoadFontFile)(
-  ULONG  cFiles,
-  ULONG_PTR  *piFile,
-  PVOID  *ppvView,
-  ULONG  *pcjView,
-  DESIGNVECTOR  *pdv,
-  ULONG  ulLangID,
-  ULONG  ulFastCheckSum);
-
-typedef VOID
-(APIENTRY *PFN_DrvMovePointer)(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN RECTL  *prcl);
-
-typedef BOOL
-(APIENTRY *PFN_DrvNextBand)(
-  IN SURFOBJ  *pso,
-  IN POINTL  *pptl);
-
-typedef VOID
-(APIENTRY *PFN_DrvNotify)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iType,
-  IN PVOID  pvData);
-
-typedef BOOL
-(APIENTRY *PFN_DrvOffset)(
-  IN SURFOBJ  *pso,
-  IN LONG  x,
-  IN LONG  y,
-  IN FLONG  flReserved);
-
-typedef BOOL
-(APIENTRY *PFN_DrvPaint)(
-  IN SURFOBJ  *pso,
-  IN CLIPOBJ  *pco,
-  IN BRUSHOBJ  *pbo,
-  IN POINTL  *pptlBrushOrg,
-  IN MIX  mix);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvQueryAdvanceWidths)(
-  IN DHPDEV  dhpdev,
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode,
-  IN HGLYPH  *phg,
-  OUT PVOID  pvWidths,
-  IN ULONG  cGlyphs);
-
-typedef BOOL
-(APIENTRY *PFN_DrvQueryDeviceSupport)(
-  SURFOBJ  *pso,
-  XLATEOBJ  *pxlo,
-  XFORMOBJ  *pxo,
-  ULONG  iType,
-  ULONG  cjIn,
-  PVOID  pvIn,
-  ULONG  cjOut,
-  PVOID  pvOut);
-
-typedef BOOL
-(APIENTRY *PFN_DrvQueryDriverInfo)(
-  DWORD  dwMode,
-  PVOID  pBuffer,
-  DWORD  cbBuf,
-  PDWORD  pcbNeeded);
-
-typedef PIFIMETRICS
-(APIENTRY *PFN_DrvQueryFont)(
-  IN DHPDEV  dhpdev,
-  IN ULONG_PTR  iFile,
-  IN ULONG  iFace,
-  IN ULONG_PTR  *pid);
-
-typedef LONG
-(APIENTRY *PFN_DrvQueryFontCaps)(
-  IN ULONG  culCaps,
-  OUT ULONG  *pulCaps);
-
-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);
-
-typedef LONG
-(APIENTRY *PFN_DrvQueryFontFile)(
-  IN ULONG_PTR  iFile,
-  IN ULONG  ulMode,
-  IN ULONG  cjBuf,
-  IN ULONG  *pulBuf);
-
-typedef PVOID
-(APIENTRY *PFN_DrvQueryFontTree)(
-  IN DHPDEV  dhpdev,
-  IN ULONG_PTR  iFile,
-  IN ULONG  iFace,
-  IN ULONG  iMode,
-  IN ULONG_PTR  *pid);
-
-typedef PFD_GLYPHATTR
-(APIENTRY *PFN_DrvQueryGlyphAttrs)(
-  IN FONTOBJ  *pfo,
-  IN ULONG  iMode);
-
-typedef ULONG
-(APIENTRY *PFN_DrvQueryPerBandInfo)(
-  IN SURFOBJ  *pso,
-  IN OUT PERBANDINFO  *pbi);
-
-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);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvRealizeBrush)(
-  IN BRUSHOBJ  *pbo,
-  IN SURFOBJ  *psoTarget,
-  IN SURFOBJ  *psoPattern,
-  IN SURFOBJ  *psoMask,
-  IN XLATEOBJ  *pxlo,
-  IN ULONG  iHatch);
-
-typedef ULONG
-(APIENTRY *PFN_DrvResetDevice)(
-  IN DHPDEV dhpdev,
-  IN PVOID Reserved);
-
-typedef BOOL
-(APIENTRY *PFN_DrvResetPDEV)(
-  DHPDEV  dhpdevOld,
-  DHPDEV  dhpdevNew);
-
-typedef ULONG_PTR
-(APIENTRY *PFN_DrvSaveScreenBits)(
-  IN SURFOBJ  *pso,
-  IN ULONG  iMode,
-  IN ULONG_PTR  ident,
-  IN RECTL  *prcl);
-
-typedef BOOL
-(APIENTRY *PFN_DrvSendPage)(
-  IN SURFOBJ  *pso);
-
-typedef BOOL
-(APIENTRY *PFN_DrvSetPalette)(
-  IN DHPDEV  dhpdev,
-  IN PALOBJ  *ppalo,
-  IN FLONG  fl,
-  IN ULONG  iStart,
-  IN ULONG  cColors);
-
-typedef BOOL
-(APIENTRY *PFN_DrvSetPixelFormat)(
-  IN SURFOBJ  *pso,
-  IN LONG  iPixelFormat,
-  IN HWND  hwnd);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvStartBanding)(
-  IN SURFOBJ  *pso,
-  IN POINTL  *pptl);
-
-typedef BOOL
-(APIENTRY *PFN_DrvStartDoc)(
-  IN SURFOBJ  *pso,
-  IN LPWSTR  pwszDocName,
-  IN DWORD  dwJobId);
-
-typedef BOOL
-(APIENTRY *PFN_DrvStartPage)(
-  IN SURFOBJ  *pso);
-
-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);
-
-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);
-
-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);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvSwapBuffers)(
-  IN SURFOBJ  *pso,
-  IN WNDOBJ  *pwo);
-
-typedef VOID
-(APIENTRY *PFN_DrvSynchronize)(
-  IN DHPDEV  dhpdev,
-  IN RECTL  *prcl);
-
-typedef VOID
-(APIENTRY *PFN_DrvSynchronizeSurface)(
-  IN SURFOBJ  *pso,
-  IN RECTL  *prcl,
-  IN FLONG  fl);
-
-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);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvUnloadFontFile)(
-  IN ULONG_PTR  iFile);
-
-
-WIN32KAPI
-VOID
-APIENTRY
-DrvDisableDirectDraw(
-  IN DHPDEV  dhpdev);
-
-typedef VOID
-(APIENTRY *PFN_DrvDisableDirectDraw)(
-  IN DHPDEV  dhpdev);
-
-WIN32KAPI
-BOOL
-APIENTRY
-DrvEnableDirectDraw(
-  IN DHPDEV  dhpdev,
-  OUT DD_CALLBACKS  *pCallBacks,
-  OUT DD_SURFACECALLBACKS  *pSurfaceCallBacks,
-  OUT DD_PALETTECALLBACKS  *pPaletteCallBacks);
-
-typedef BOOL
-(APIENTRY *PFN_DrvEnableDirectDraw)(
-  IN DHPDEV  dhpdev,
-  OUT DD_CALLBACKS  *pCallBacks,
-  OUT DD_SURFACECALLBACKS  *pSurfaceCallBacks,
-  OUT DD_PALETTECALLBACKS  *pPaletteCallBacks);
-
-WIN32KAPI
-BOOL
-APIENTRY
-DrvGetDirectDrawInfo(
-  IN DHPDEV  dhpdev,
-  OUT DD_HALINFO  *pHalInfo,
-  OUT DWORD  *pdwNumHeaps,
-  OUT VIDEOMEMORY  *pvmList,
-  OUT DWORD  *pdwNumFourCCCodes,
-  OUT DWORD  *pdwFourCC);
-
-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);
-
-typedef BOOL
-(APIENTRY *PFN_DrvQuerySpoolType)(
-  IN DHPDEV dhpdev,
-  IN LPWSTR pwchType);
+(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;
 
 
 #ifdef __cplusplus




More information about the Ros-diffs mailing list