/*
 * NtGdi Entrypoints
 */
#ifndef _NTGDI_
#define _NTGDI_

#ifndef W32KAPI
#define W32KAPI  DECLSPEC_ADDRSAFE
#endif

#ifndef _WINDOWBLT_NOTIFICATION_
#define _WINDOWBLT_NOTIFICATION_
#endif

#define TRACE_SURFACE_ALLOCS        (DBG || 0)

/* NtGdiGetLinkedUfis */
#define FL_UFI_PRIVATEFONT          1
#define FL_UFI_DESIGNVECTOR_PFF     2
#define FL_UFI_MEMORYFONT           4

/* NtGdiSetIcmMode */
#define ICM_SET_MODE                1
#define ICM_SET_CALIBRATE_MODE      2
#define ICM_SET_COLOR_MODE          3
#define ICM_CHECK_COLOR_MODE        4

/* NtGdiCreateColorSpace */
#define LCSEX_ANSICREATED           1
#define LCSEX_TEMPPROFILE           2

/* NtGdiGetStats */
#define GS_NUM_OBJS_ALL             0
#define GS_HANDOBJ_CURRENT          1
#define GS_HANDOBJ_MAX              2
#define GS_HANDOBJ_ALLOC            3
#define GS_LOOKASIDE_INFO           4

/* NtGdiEnumFontOpen */
#define TYPE_ENUMFONTS              1
#define TYPE_ENUMFONTFAMILIES       2
#define TYPE_ENUMFONTFAMILIESEX     3

typedef enum _COLORPALETTEINFO
{
    ColorPaletteQuery,
    ColorPaletteSet
} COLORPALETTEINFO, *PCOLORPALETTEINFO;

/* NtGdiIcmBrushInfo */
typedef enum _ICM_DIB_INFO_CMD
{
    IcmQueryBrush,
    IcmSetBrush
} ICM_DIB_INFO, *PICM_DIB_INFO;

/* NtGdiCreateColorSpace */
typedef struct _LOGCOLORSPACEEXW
{
    LOGCOLORSPACEW lcsColorSpace;
    DWORD dwFlags;
} LOGCOLORSPACEEXW, *PLOGCOLORSPACEEXW;

typedef struct _POLYPATBLT
{
  INT nXLeft;
  INT nYLeft;
  INT nWidth;
  INT nHeight;
  HBRUSH hBrush;
} POLYPATBLT, *PPOLYPATBLT;

/* NtGdiAddRemoteMMInstanceToDC */
typedef struct tagDOWNLOADDESIGNVECTOR
{
    UNIVERSAL_FONT_ID ufiBase;
    DESIGNVECTOR dv;
} DOWNLOADDESIGNVECTOR;

W32KAPI
BOOL
APIENTRY
NtGdiInit(VOID);

W32KAPI
INT
APIENTRY
NtGdiSetDIBitsToDeviceInternal(
    _In_ HDC hdcDest,
    _In_ INT xDst,
    _In_ INT yDst,
    _In_ DWORD cx,
    _In_ DWORD cy,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_ DWORD iStartScan,
    _In_ DWORD cNumScan,
    _In_reads_bytes_(cjMaxBits) LPBYTE pInitBits,
    _In_reads_bytes_(cjMaxInfo) LPBITMAPINFO pbmi,
    _In_ DWORD iUsage,
    _In_ UINT cjMaxBits,
    _In_ UINT cjMaxInfo,
    _In_ BOOL bTransformCoordinates,
    _In_opt_ HANDLE hcmXform
);

W32KAPI
BOOL
APIENTRY
NtGdiGetFontResourceInfoInternalW(
    _In_reads_z_(cwc) LPWSTR pwszFiles,
    _In_ ULONG cwc,
    _In_ ULONG cFiles,
    _In_ UINT cjBuf,
    _Out_ LPDWORD pdwBytes,
    _Out_writes_bytes_(cjBuf) LPVOID pvBuf,
    _In_ DWORD iType
);

W32KAPI
DWORD
APIENTRY
NtGdiGetGlyphIndicesW(
    _In_ HDC hdc,
    IN OPTIONAL LPWSTR pwc,
    _In_ INT cwc,
    OUT OPTIONAL LPWORD pgi,
    _In_ DWORD iMode
);

W32KAPI
DWORD
APIENTRY
NtGdiGetGlyphIndicesWInternal(
    _In_ HDC hdc,
    IN OPTIONAL LPWSTR pwc,
    _In_ INT cwc,
    OUT OPTIONAL LPWORD pgi,
    _In_ DWORD iMode,
    _In_ BOOL bSubset
);

W32KAPI
HPALETTE
APIENTRY
NtGdiCreatePaletteInternal(
    IN LPLOGPALETTE pLogPal,
    _In_ UINT cEntries
);

W32KAPI
BOOL
APIENTRY
NtGdiArcInternal(
    _In_ ARCTYPE arctype,
    _In_ HDC hdc,
    _In_ INT x1,
    _In_ INT y1,
    _In_ INT x2,
    _In_ INT y2,
    _In_ INT x3,
    _In_ INT y3,
    _In_ INT x4,
    _In_ INT y4);

W32KAPI
INT
APIENTRY
NtGdiStretchDIBitsInternal(
    _In_ HDC hdc,
    _In_ INT xDst,
    _In_ INT yDst,
    _In_ INT cxDst,
    _In_ INT cyDst,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_ INT cxSrc,
    _In_ INT cySrc,
    _In_opt_ LPBYTE pjInit,
    _In_ LPBITMAPINFO pbmi,
    _In_ DWORD dwUsage,
    _In_ DWORD dwRop4,
    _In_ UINT cjMaxInfo,
    _In_ UINT cjMaxBits,
    _In_opt_ HANDLE hcmXform);

W32KAPI
ULONG
APIENTRY
NtGdiGetOutlineTextMetricsInternalW(
    _In_ HDC hdc,
    _In_ ULONG cjotm,
    _Out_opt_ OUTLINETEXTMETRICW *potmw,
    _Out_ TMDIFF *ptmd);

_Success_(return != FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiGetAndSetDCDword(
    _In_ HDC hdc,
    _In_ UINT u,
    _In_ DWORD dwIn,
    _Out_ DWORD *pdwResult);

W32KAPI
HANDLE
APIENTRY
NtGdiGetDCObject(
    _In_ HDC hdc,
    _In_ INT itype);

W32KAPI
HDC
APIENTRY
NtGdiGetDCforBitmap(
    _In_ HBITMAP hsurf);

W32KAPI
BOOL
APIENTRY
NtGdiGetMonitorID(
    _In_ HDC hdc,
    _In_ DWORD dwSize,
    _Out_ LPWSTR pszMonitorID);

W32KAPI
INT
APIENTRY
NtGdiGetLinkedUFIs(
    _In_ HDC hdc,
    OUT OPTIONAL PUNIVERSAL_FONT_ID pufiLinkedUFIs,
    _In_ INT BufferSize
);

W32KAPI
BOOL
APIENTRY
NtGdiSetLinkedUFIs(
    _In_ HDC hdc,
    IN PUNIVERSAL_FONT_ID pufiLinks,
    _In_ ULONG uNumUFIs
);

W32KAPI
BOOL
APIENTRY
NtGdiGetUFI(
    _In_ HDC hdc,
    OUT PUNIVERSAL_FONT_ID pufi,
    OUT OPTIONAL DESIGNVECTOR *pdv,
    OUT ULONG *pcjDV,
    OUT ULONG *pulBaseCheckSum,
    OUT FLONG *pfl
);

W32KAPI
BOOL
APIENTRY
NtGdiForceUFIMapping(
    _In_ HDC hdc,
    IN PUNIVERSAL_FONT_ID pufi
);

W32KAPI
BOOL
APIENTRY
NtGdiGetUFIPathname(
    IN PUNIVERSAL_FONT_ID pufi,
    OUT OPTIONAL ULONG* pcwc,
    OUT OPTIONAL LPWSTR pwszPathname,
    OUT OPTIONAL ULONG* pcNumFiles,
    _In_ FLONG fl,
    OUT OPTIONAL BOOL *pbMemFont,
    OUT OPTIONAL ULONG *pcjView,
    OUT OPTIONAL PVOID pvView,
    OUT OPTIONAL BOOL *pbTTC,
    OUT OPTIONAL ULONG *piTTC
);

W32KAPI
BOOL
APIENTRY
NtGdiAddRemoteFontToDC(
    _In_ HDC hdc,
    _In_ PVOID pvBuffer,
    _In_ ULONG cjBuffer,
    IN OPTIONAL PUNIVERSAL_FONT_ID pufi
);

W32KAPI
HANDLE
APIENTRY
NtGdiAddFontMemResourceEx(
    _In_ PVOID pvBuffer,
    _In_ DWORD cjBuffer,
    IN DESIGNVECTOR *pdv,
    _In_ ULONG cjDV,
    OUT DWORD *pNumFonts
);

W32KAPI
BOOL
APIENTRY
NtGdiRemoveFontMemResourceEx(
    _In_ HANDLE hMMFont);

W32KAPI
BOOL
APIENTRY
NtGdiUnmapMemFont(
    _In_ PVOID pvView);

W32KAPI
BOOL
APIENTRY
NtGdiRemoveMergeFont(
    _In_ HDC hdc,
    IN UNIVERSAL_FONT_ID *pufi
);

W32KAPI
BOOL
APIENTRY
NtGdiAnyLinkedFonts(VOID);

W32KAPI
BOOL
APIENTRY
NtGdiGetEmbUFI(
    _In_ HDC hdc,
    OUT PUNIVERSAL_FONT_ID pufi,
    OUT OPTIONAL DESIGNVECTOR *pdv,
    OUT ULONG *pcjDV,
    OUT ULONG *pulBaseCheckSum,
    OUT FLONG  *pfl,
    OUT KERNEL_PVOID *embFontID
);

W32KAPI
ULONG
APIENTRY
NtGdiGetEmbedFonts(VOID);

W32KAPI
BOOL
APIENTRY
NtGdiChangeGhostFont(
    IN KERNEL_PVOID *pfontID,
    _In_ BOOL bLoad
);

W32KAPI
BOOL
APIENTRY
NtGdiAddEmbFontToDC(
    _In_ HDC hdc,
    IN VOID **pFontID
);

W32KAPI
BOOL
APIENTRY
NtGdiFontIsLinked(
    _In_ HDC hdc);

W32KAPI
ULONG_PTR
APIENTRY
NtGdiPolyPolyDraw(
    _In_ HDC hdc,
    _In_ PPOINT ppt,
    _In_ PULONG pcpt,
    _In_ ULONG ccpt,
    _In_ INT iFunc);

W32KAPI
LONG
APIENTRY
NtGdiDoPalette(
    _In_ HGDIOBJ hObj,
    _In_ WORD iStart,
    _In_ WORD cEntries,
    _When_((iFunc == GdiPalGetEntries) || (iFunc == GdiPalGetSystemEntries), _Out_writes_bytes_(cEntries*sizeof(PALETTEENTRY)))
    _When_((iFunc != GdiPalGetEntries) && (iFunc != GdiPalGetSystemEntries), _In_reads_bytes_(cEntries*sizeof(PALETTEENTRY))) LPVOID pEntries,
    _In_ DWORD iFunc,
    _In_ BOOL bInbound);

W32KAPI
BOOL
APIENTRY
NtGdiComputeXformCoefficients(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiGetWidthTable(
    _In_ HDC hdc,
    _In_ ULONG cSpecial,
    IN WCHAR *pwc,
    _In_ ULONG cwc,
    OUT USHORT *psWidth,
    OUT OPTIONAL WIDTHDATA *pwd,
    OUT FLONG *pflInfo
);

_Success_(return != 0)
W32KAPI
INT
APIENTRY
NtGdiDescribePixelFormat(
    _In_ HDC hdc,
    _In_ INT ipfd,
    _In_ UINT cjpfd,
    _When_(cjpfd != 0, _Out_) PPIXELFORMATDESCRIPTOR ppfd);

W32KAPI
BOOL
APIENTRY
NtGdiSetPixelFormat(
    _In_ HDC hdc,
    _In_ INT ipfd);

W32KAPI
BOOL
APIENTRY
NtGdiSwapBuffers(
    _In_ HDC hdc);

W32KAPI
INT
APIENTRY
NtGdiSetupPublicCFONT(
    _In_ HDC hdc,
    IN OPTIONAL HFONT hf,
    _In_ ULONG ulAve
);

W32KAPI
DWORD
APIENTRY
NtGdiDxgGenericThunk(
    _In_ ULONG_PTR ulIndex,
    _In_ ULONG_PTR ulHandle,
    IN OUT SIZE_T *pdwSizeOfPtr1,
    IN OUT  PVOID pvPtr1,
    IN OUT SIZE_T *pdwSizeOfPtr2,
    IN OUT  PVOID pvPtr2
);

W32KAPI
DWORD
APIENTRY
NtGdiDdAddAttachedSurface(
    _In_ HANDLE hSurface,
    _In_ HANDLE hSurfaceAttached,
    IN OUT PDD_ADDATTACHEDSURFACEDATA puAddAttachedSurfaceData
);

W32KAPI
BOOL
APIENTRY
NtGdiDdAttachSurface(
    _In_ HANDLE hSurfaceFrom,
    _In_ HANDLE hSurfaceTo);

W32KAPI
DWORD
APIENTRY
NtGdiDdBlt(
    _In_ HANDLE hSurfaceDest,
    _In_ HANDLE hSurfaceSrc,
    IN OUT PDD_BLTDATA puBltData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdCanCreateSurface(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdColorControl(
    _In_ HANDLE hSurface,
    IN OUT PDD_COLORCONTROLDATA puColorControlData
);

W32KAPI
HANDLE
APIENTRY
NtGdiDdCreateDirectDrawObject(
    _In_ HDC hdc);

W32KAPI
DWORD
APIENTRY
NtGdiDdCreateSurface(
    _In_ HANDLE hDirectDraw,
    IN HANDLE* hSurface,
    IN OUT DDSURFACEDESC* puSurfaceDescription,
    IN OUT DD_SURFACE_GLOBAL* puSurfaceGlobalData,
    IN OUT DD_SURFACE_LOCAL* puSurfaceLocalData,
    IN OUT DD_SURFACE_MORE* puSurfaceMoreData,
    IN OUT DD_CREATESURFACEDATA* puCreateSurfaceData,
    OUT HANDLE* puhSurface
);

W32KAPI
HANDLE
APIENTRY
NtGdiDdCreateSurfaceObject(
    _In_ HANDLE hDirectDrawLocal,
    _In_ HANDLE hSurface,
    IN PDD_SURFACE_LOCAL puSurfaceLocal,
    IN PDD_SURFACE_MORE puSurfaceMore,
    IN PDD_SURFACE_GLOBAL puSurfaceGlobal,
    _In_ BOOL bComplete
);

W32KAPI
BOOL
APIENTRY
NtGdiDdDeleteSurfaceObject(
    _In_ HANDLE hSurface);

W32KAPI
BOOL
APIENTRY
NtGdiDdDeleteDirectDrawObject(
    _In_ HANDLE hDirectDrawLocal);

W32KAPI
DWORD
APIENTRY
NtGdiDdDestroySurface(
    _In_ HANDLE hSurface,
    _In_ BOOL bRealDestroy);

W32KAPI
DWORD
APIENTRY
NtGdiDdFlip(
    _In_ HANDLE hSurfaceCurrent,
    _In_ HANDLE hSurfaceTarget,
    _In_ HANDLE hSurfaceCurrentLeft,
    _In_ HANDLE hSurfaceTargetLeft,
    IN OUT PDD_FLIPDATA puFlipData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetAvailDriverMemory(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETAVAILDRIVERMEMORYDATA puGetAvailDriverMemoryData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetBltStatus(
    _In_ HANDLE hSurface,
    IN OUT PDD_GETBLTSTATUSDATA puGetBltStatusData
);

W32KAPI
HDC
APIENTRY
NtGdiDdGetDC(
    _In_ HANDLE hSurface,
    IN PALETTEENTRY* puColorTable
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetDriverInfo(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETDRIVERINFODATA puGetDriverInfoData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetFlipStatus(
    _In_ HANDLE hSurface,
    IN OUT PDD_GETFLIPSTATUSDATA puGetFlipStatusData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetScanLine(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETSCANLINEDATA puGetScanLineData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdSetExclusiveMode(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_SETEXCLUSIVEMODEDATA puSetExclusiveModeData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdFlipToGDISurface(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_FLIPTOGDISURFACEDATA puFlipToGDISurfaceData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdLock(
    _In_ HANDLE hSurface,
    IN OUT PDD_LOCKDATA puLockData,
    _In_ HDC hdcClip
);

W32KAPI
BOOL
APIENTRY
NtGdiDdQueryDirectDrawObject(
    _In_ HANDLE hDirectDrawLocal,
    OUT PDD_HALINFO pHalInfo,
    OUT DWORD* pCallBackFlags,
    OUT OPTIONAL LPD3DNTHAL_CALLBACKS puD3dCallbacks,
    OUT OPTIONAL LPD3DNTHAL_GLOBALDRIVERDATA puD3dDriverData,
    OUT OPTIONAL PDD_D3DBUFCALLBACKS puD3dBufferCallbacks,
    OUT OPTIONAL LPDDSURFACEDESC puD3dTextureFormats,
    OUT DWORD* puNumHeaps,
    OUT OPTIONAL VIDEOMEMORY* puvmList,
    OUT DWORD* puNumFourCC,
    OUT OPTIONAL DWORD* puFourCC
);

W32KAPI
BOOL
APIENTRY
NtGdiDdReenableDirectDrawObject(
    _In_ HANDLE hDirectDrawLocal,
    IN OUT BOOL* pubNewMode
);

W32KAPI
BOOL
APIENTRY
NtGdiDdReleaseDC(
    _In_ HANDLE hSurface);

W32KAPI
BOOL
APIENTRY
NtGdiDdResetVisrgn(
    _In_ HANDLE hSurface,
    _In_ HWND hwnd);

W32KAPI
DWORD
APIENTRY
NtGdiDdSetColorKey(
    _In_ HANDLE hSurface,
    IN OUT PDD_SETCOLORKEYDATA puSetColorKeyData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdSetOverlayPosition(
    _In_ HANDLE hSurfaceSource,
    _In_ HANDLE hSurfaceDestination,
    IN OUT PDD_SETOVERLAYPOSITIONDATA puSetOverlayPositionData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdUnattachSurface(
    _In_ HANDLE hSurface,
    _In_ HANDLE hSurfaceAttached
);

W32KAPI
DWORD
APIENTRY
NtGdiDdUnlock(
    _In_ HANDLE hSurface,
    IN OUT PDD_UNLOCKDATA puUnlockData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdUpdateOverlay(
    _In_ HANDLE hSurfaceDestination,
    _In_ HANDLE hSurfaceSource,
    IN OUT PDD_UPDATEOVERLAYDATA puUpdateOverlayData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdWaitForVerticalBlank(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_WAITFORVERTICALBLANKDATA puWaitForVerticalBlankData
);

W32KAPI
HANDLE
APIENTRY
NtGdiDdGetDxHandle(
    _In_opt_ HANDLE hDirectDraw,
    _In_opt_ HANDLE hSurface,
    _In_ BOOL bRelease);

W32KAPI
BOOL
APIENTRY
NtGdiDdSetGammaRamp(
    _In_ HANDLE hDirectDraw,
    _In_ HDC hdc,
    _In_ LPVOID lpGammaRamp);

W32KAPI
DWORD
APIENTRY
NtGdiDdLockD3D(
    _In_ HANDLE hSurface,
    IN OUT PDD_LOCKDATA puLockData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdUnlockD3D(
    _In_ HANDLE hSurface,
    IN OUT PDD_UNLOCKDATA puUnlockData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdCreateD3DBuffer(
    _In_ HANDLE hDirectDraw,
    IN OUT HANDLE* hSurface,
    IN OUT DDSURFACEDESC* puSurfaceDescription,
    IN OUT DD_SURFACE_GLOBAL* puSurfaceGlobalData,
    IN OUT DD_SURFACE_LOCAL* puSurfaceLocalData,
    IN OUT DD_SURFACE_MORE* puSurfaceMoreData,
    IN OUT DD_CREATESURFACEDATA* puCreateSurfaceData,
    IN OUT HANDLE* puhSurface
);

W32KAPI
DWORD
APIENTRY
NtGdiDdCanCreateD3DBuffer(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_CANCREATESURFACEDATA puCanCreateSurfaceData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdDestroyD3DBuffer(
    _In_ HANDLE hSurface);

W32KAPI
BOOL
APIENTRY
NtGdiD3dContextCreate(
    _In_ HANDLE hDirectDrawLocal,
    _In_ HANDLE hSurfColor,
    _In_ HANDLE hSurfZ,
    IN OUT D3DNTHAL_CONTEXTCREATEI *pdcci
);

W32KAPI
DWORD
APIENTRY
NtGdiD3dContextDestroy(
    IN LPD3DNTHAL_CONTEXTDESTROYDATA pdcdd
);

W32KAPI
DWORD
APIENTRY
NtGdiD3dContextDestroyAll(
    OUT LPD3DNTHAL_CONTEXTDESTROYALLDATA pdcdad
);

W32KAPI
DWORD
APIENTRY
NtGdiD3dValidateTextureStageState(
    IN OUT LPD3DNTHAL_VALIDATETEXTURESTAGESTATEDATA pData
);

W32KAPI
DWORD
APIENTRY
NtGdiD3dDrawPrimitives2(
    _In_ HANDLE hCmdBuf,
    _In_ HANDLE hVBuf,
    IN OUT LPD3DNTHAL_DRAWPRIMITIVES2DATA pded,
    IN OUT FLATPTR* pfpVidMemCmd,
    IN OUT DWORD* pdwSizeCmd,
    IN OUT FLATPTR* pfpVidMemVtx,
    IN OUT DWORD* pdwSizeVtx
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetDriverState(
    IN OUT PDD_GETDRIVERSTATEDATA pdata
);

W32KAPI
DWORD
APIENTRY
NtGdiDdCreateSurfaceEx(
    _In_ HANDLE hDirectDraw,
    _In_ HANDLE hSurface,
    _In_ DWORD dwSurfaceHandle
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpCanCreateVideoPort(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_CANCREATEVPORTDATA puCanCreateVPortData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpColorControl(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_VPORTCOLORDATA puVPortColorData
);

W32KAPI
HANDLE
APIENTRY
NtGdiDvpCreateVideoPort(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_CREATEVPORTDATA puCreateVPortData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpDestroyVideoPort(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_DESTROYVPORTDATA puDestroyVPortData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpFlipVideoPort(
    _In_ HANDLE hVideoPort,
    _In_ HANDLE hDDSurfaceCurrent,
    _In_ HANDLE hDDSurfaceTarget,
    IN OUT PDD_FLIPVPORTDATA puFlipVPortData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoPortBandwidth(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_GETVPORTBANDWIDTHDATA puGetVPortBandwidthData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoPortField(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_GETVPORTFIELDDATA puGetVPortFieldData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoPortFlipStatus(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETVPORTFLIPSTATUSDATA puGetVPortFlipStatusData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoPortInputFormats(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_GETVPORTINPUTFORMATDATA puGetVPortInputFormatData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoPortLine(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_GETVPORTLINEDATA puGetVPortLineData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoPortOutputFormats(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_GETVPORTOUTPUTFORMATDATA puGetVPortOutputFormatData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoPortConnectInfo(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETVPORTCONNECTDATA puGetVPortConnectData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpGetVideoSignalStatus(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_GETVPORTSIGNALDATA puGetVPortSignalData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpUpdateVideoPort(
    _In_ HANDLE hVideoPort,
    IN HANDLE* phSurfaceVideo,
    IN HANDLE* phSurfaceVbi,
    IN OUT PDD_UPDATEVPORTDATA puUpdateVPortData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpWaitForVideoPortSync(
    _In_ HANDLE hVideoPort,
    IN OUT PDD_WAITFORVPORTSYNCDATA puWaitForVPortSyncData
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpAcquireNotification(
    _In_ HANDLE hVideoPort,
    IN OUT HANDLE* hEvent,
    IN LPDDVIDEOPORTNOTIFY pNotify
);

W32KAPI
DWORD
APIENTRY
NtGdiDvpReleaseNotification(
    _In_ HANDLE hVideoPort,
    _In_ HANDLE hEvent);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetMoCompGuids(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETMOCOMPGUIDSDATA puGetMoCompGuidsData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetMoCompFormats(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETMOCOMPFORMATSDATA puGetMoCompFormatsData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetMoCompBuffInfo(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETMOCOMPCOMPBUFFDATA puGetBuffData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdGetInternalMoCompInfo(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_GETINTERNALMOCOMPDATA puGetInternalData
);

W32KAPI
HANDLE
APIENTRY
NtGdiDdCreateMoComp(
    _In_ HANDLE hDirectDraw,
    IN OUT PDD_CREATEMOCOMPDATA puCreateMoCompData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdDestroyMoComp(
    _In_ HANDLE hMoComp,
    IN OUT PDD_DESTROYMOCOMPDATA puDestroyMoCompData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdBeginMoCompFrame(
    _In_ HANDLE hMoComp,
    IN OUT PDD_BEGINMOCOMPFRAMEDATA puBeginFrameData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdEndMoCompFrame(
    _In_ HANDLE hMoComp,
    IN OUT PDD_ENDMOCOMPFRAMEDATA puEndFrameData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdRenderMoComp(
    _In_ HANDLE hMoComp,
    IN OUT PDD_RENDERMOCOMPDATA puRenderMoCompData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdQueryMoCompStatus(
    _In_ HANDLE hMoComp,
    IN OUT PDD_QUERYMOCOMPSTATUSDATA puQueryMoCompStatusData
);

W32KAPI
DWORD
APIENTRY
NtGdiDdAlphaBlt(
    _In_ HANDLE hSurfaceDest,
    _In_opt_ HANDLE hSurfaceSrc,
    IN OUT PDD_BLTDATA puBltData
);

W32KAPI
BOOL
APIENTRY
NtGdiAlphaBlend(
    _In_ HDC hdcDst,
    _In_ LONG DstX,
    _In_ LONG DstY,
    _In_ LONG DstCx,
    _In_ LONG DstCy,
    _In_ HDC hdcSrc,
    _In_ LONG SrcX,
    _In_ LONG SrcY,
    _In_ LONG SrcCx,
    _In_ LONG SrcCy,
    _In_ BLENDFUNCTION BlendFunction,
    _In_ HANDLE hcmXform);

W32KAPI
BOOL
APIENTRY
NtGdiGradientFill(
    _In_ HDC hdc,
    _In_ PTRIVERTEX pVertex,
    _In_ ULONG nVertex,
    _In_ PVOID pMesh,
    _In_ ULONG nMesh,
    _In_ ULONG ulMode);

W32KAPI
BOOL
APIENTRY
NtGdiSetIcmMode(
    _In_ HDC hdc,
    _In_ ULONG nCommand,
    _In_ ULONG ulMode);

W32KAPI
HANDLE
APIENTRY
NtGdiCreateColorSpace(
    _In_ PLOGCOLORSPACEEXW pLogColorSpace);

W32KAPI
BOOL
APIENTRY
NtGdiDeleteColorSpace(
    _In_ HANDLE hColorSpace);

W32KAPI
BOOL
APIENTRY
NtGdiSetColorSpace(
    _In_ HDC hdc,
    _In_ HCOLORSPACE hColorSpace);

W32KAPI
HANDLE
APIENTRY
NtGdiCreateColorTransform(
    _In_ HDC hdc,
    _In_ LPLOGCOLORSPACEW pLogColorSpaceW,
    _In_reads_bytes_opt_(cjSrcProfile) PVOID pvSrcProfile,
    _In_ ULONG cjSrcProfile,
    _In_reads_bytes_opt_(cjDestProfile) PVOID pvDestProfile,
    _In_ ULONG cjDestProfile,
    _In_reads_bytes_opt_(cjTargetProfile) PVOID pvTargetProfile,
    _In_ ULONG cjTargetProfile);

W32KAPI
BOOL
APIENTRY
NtGdiDeleteColorTransform(
    _In_ HDC hdc,
    _In_ HANDLE hColorTransform);

W32KAPI
BOOL
APIENTRY
NtGdiCheckBitmapBits(
    _In_ HDC hdc,
    _In_ HANDLE hColorTransform,
    _In_ PVOID pvBits,
    _In_ ULONG bmFormat,
    _In_ DWORD dwWidth,
    _In_ DWORD dwHeight,
    _In_ DWORD dwStride,
    OUT PBYTE paResults
);

W32KAPI
ULONG
APIENTRY
NtGdiColorCorrectPalette(
    _In_ HDC hdc,
    _In_ HPALETTE hpal,
    _In_ ULONG FirstEntry,
    _In_ ULONG NumberOfEntries,
    IN OUT PALETTEENTRY *ppalEntry,
    _In_ ULONG Command
);

W32KAPI
ULONG_PTR
APIENTRY
NtGdiGetColorSpaceforBitmap(
    _In_ HBITMAP hsurf);

_Success_(return != FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiGetDeviceGammaRamp(
    _In_ HDC hdc,
    _Out_writes_bytes_(sizeof(GAMMARAMP)) LPVOID lpGammaRamp);

W32KAPI
BOOL
APIENTRY
NtGdiSetDeviceGammaRamp(
    _In_ HDC hdc,
    _In_reads_bytes_(sizeof(GAMMARAMP)) LPVOID lpGammaRamp);

W32KAPI
BOOL
APIENTRY
NtGdiIcmBrushInfo(
    _In_ HDC hdc,
    _In_ HBRUSH hbrush,
    IN OUT PBITMAPINFO pbmiDIB,
    IN OUT PVOID pvBits,
    IN OUT ULONG *pulBits,
    OUT OPTIONAL DWORD *piUsage,
    OUT OPTIONAL BOOL *pbAlreadyTran,
    _In_ ULONG Command
);

W32KAPI
VOID
APIENTRY
NtGdiFlush(VOID);

W32KAPI
HDC
APIENTRY
NtGdiCreateMetafileDC(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiMakeInfoDC(
    _In_ HDC hdc,
    _In_ BOOL bSet);

W32KAPI
HANDLE
APIENTRY
NtGdiCreateClientObj(
    _In_ ULONG ulType);

W32KAPI
BOOL
APIENTRY
NtGdiDeleteClientObj(
    _In_ HANDLE h);

W32KAPI
LONG
APIENTRY
NtGdiGetBitmapBits(
    _In_ HBITMAP hbm,
    _In_ ULONG cjMax,
    OUT OPTIONAL PBYTE pjOut
);

W32KAPI
BOOL
APIENTRY
NtGdiDeleteObjectApp(
    _In_ HANDLE hobj);

W32KAPI
INT
APIENTRY
NtGdiGetPath(
    _In_ HDC hdc,
    OUT OPTIONAL LPPOINT pptlBuf,
    OUT OPTIONAL LPBYTE pjTypes,
    _In_ INT cptBuf
);

W32KAPI
HDC
APIENTRY
NtGdiCreateCompatibleDC(
    _In_opt_ HDC hdc);

W32KAPI
HBITMAP
APIENTRY
NtGdiCreateDIBitmapInternal(
    _In_ HDC hdc,
    _In_ INT cx,
    _In_ INT cy,
    _In_ DWORD fInit,
    _In_opt_ LPBYTE pjInit,
    _In_opt_ LPBITMAPINFO pbmi,
    _In_ DWORD iUsage,
    _In_ UINT cjMaxInitInfo,
    _In_ UINT cjMaxBits,
    _In_ FLONG f,
    _In_ HANDLE hcmXform);

W32KAPI
HBITMAP
APIENTRY
NtGdiCreateDIBSection(
    _In_ HDC hdc,
    _In_opt_ HANDLE hSectionApp,
    _In_ DWORD dwOffset,
    _In_ LPBITMAPINFO pbmi,
    _In_ DWORD iUsage,
    _In_ UINT cjHeader,
    _In_ FLONG fl,
    _In_ ULONG_PTR dwColorSpace,
    _Out_opt_ PVOID *ppvBits);

W32KAPI
HBRUSH
APIENTRY
NtGdiCreateSolidBrush(
    _In_ COLORREF cr,
    _In_opt_ HBRUSH hbr);

W32KAPI
HBRUSH
APIENTRY
NtGdiCreateDIBBrush(
    _In_ PVOID pv,
    _In_ FLONG fl,
    _In_ UINT  cj,
    _In_ BOOL  b8X8,
    _In_ BOOL bPen,
    _In_ PVOID pClient);

W32KAPI
HBRUSH
APIENTRY
NtGdiCreatePatternBrushInternal(
    _In_ HBITMAP hbm,
    _In_ BOOL bPen,
    _In_ BOOL b8X8);

W32KAPI
HBRUSH
APIENTRY
NtGdiCreateHatchBrushInternal(
    _In_ ULONG ulStyle,
    _In_ COLORREF clrr,
    _In_ BOOL bPen);

W32KAPI
HPEN
APIENTRY
NtGdiExtCreatePen(
    _In_ ULONG flPenStyle,
    _In_ ULONG ulWidth,
    _In_ ULONG iBrushStyle,
    _In_ ULONG ulColor,
    _In_ ULONG_PTR lClientHatch,
    _In_ ULONG_PTR lHatch,
    _In_ ULONG cstyle,
    _In_opt_ PULONG pulStyle,
    _In_ ULONG cjDIB,
    _In_ BOOL bOldStylePen,
    _In_opt_ HBRUSH hbrush);

W32KAPI
HRGN
APIENTRY
NtGdiCreateEllipticRgn(
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom);

W32KAPI
HRGN
APIENTRY
NtGdiCreateRoundRectRgn(
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom,
    _In_ INT xWidth,
    _In_ INT yHeight);

W32KAPI
HANDLE
APIENTRY
NtGdiCreateServerMetaFile(
    _In_ DWORD iType,
    _In_ ULONG cjData,
    _In_reads_bytes_(cjData) LPBYTE pjData,
    _In_ DWORD mm,
    _In_ DWORD xExt,
    _In_ DWORD yExt);

W32KAPI
HRGN
APIENTRY
NtGdiExtCreateRegion(
    _In_opt_ LPXFORM px,
    _In_ DWORD cj,
    _In_ LPRGNDATA prgn);

W32KAPI
ULONG
APIENTRY
NtGdiMakeFontDir(
    _In_ FLONG flEmbed,
    _Out_writes_bytes_(cjFontDir) PBYTE pjFontDir,
    _In_ unsigned cjFontDir,
    _In_z_bytecount_(cjPathname) LPWSTR pwszPathname,
    _In_ unsigned cjPathname);

W32KAPI
BOOL
APIENTRY
NtGdiPolyDraw(
    _In_ HDC hdc,
    _In_count_(cpt) LPPOINT ppt,
    _In_count_(cpt) LPBYTE pjAttr,
    _In_ ULONG cpt);

W32KAPI
BOOL
APIENTRY
NtGdiPolyTextOutW(
    _In_ HDC hdc,
    _In_ POLYTEXTW *pptw,
    _In_ UINT cStr,
    _In_ DWORD dwCodePage);

W32KAPI
ULONG
APIENTRY
NtGdiGetServerMetaFileBits(
    _In_ HANDLE hmo,
    _In_ ULONG cjData,
    OUT OPTIONAL LPBYTE pjData,
    OUT PDWORD piType,
    OUT PDWORD pmm,
    OUT PDWORD pxExt,
    OUT PDWORD pyExt
);

W32KAPI
BOOL
APIENTRY
NtGdiEqualRgn(
    _In_ HRGN hrgn1,
    _In_ HRGN hrgn2);

_Must_inspect_result_
W32KAPI
BOOL
APIENTRY
NtGdiGetBitmapDimension(
    _In_ HBITMAP hbm,
    _When_(return != FALSE, _Out_) LPSIZE psize);

W32KAPI
UINT
APIENTRY
NtGdiGetNearestPaletteIndex(
    _In_ HPALETTE hpal,
    _In_ COLORREF crColor);

W32KAPI
BOOL
APIENTRY
NtGdiPtVisible(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y);

W32KAPI
BOOL
APIENTRY
NtGdiRectVisible(
    _In_ HDC hdc,
    _In_ LPRECT prc);

W32KAPI
BOOL
APIENTRY
NtGdiRemoveFontResourceW(
    _In_z_count_(cwc) WCHAR *pwszFiles,
    _In_ ULONG cwc,
    _In_ ULONG cFiles,
    _In_ ULONG fl,
    _In_ DWORD dwPidTid,
    _In_opt_ DESIGNVECTOR *pdv);

W32KAPI
BOOL
APIENTRY
NtGdiResizePalette(
    _In_ HPALETTE hpal,
    _In_ UINT cEntry);

W32KAPI
BOOL
APIENTRY
NtGdiSetBitmapDimension(
    _In_ HBITMAP hbm,
    _In_ INT cx,
    _In_ INT cy,
    _In_opt_ LPSIZE psizeOut);

W32KAPI
INT
APIENTRY
NtGdiOffsetClipRgn(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y);

W32KAPI
INT
APIENTRY
NtGdiSetMetaRgn(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiSetTextJustification(
    _In_ HDC hdc,
    _In_ INT lBreakExtra,
    _In_ INT cBreak);

W32KAPI
INT
APIENTRY
NtGdiGetAppClipBox(
    _In_ HDC hdc,
    _Out_ LPRECT prc);

W32KAPI
BOOL
APIENTRY
NtGdiGetTextExtentExW(
    _In_ HDC hdc,
    IN OPTIONAL LPWSTR lpwsz,
    _In_ ULONG cwc,
    _In_ ULONG dxMax,
    OUT OPTIONAL ULONG *pcCh,
    OUT OPTIONAL PULONG pdxOut,
    OUT LPSIZE psize,
    _In_ FLONG fl
);

W32KAPI
BOOL
APIENTRY
NtGdiGetCharABCWidthsW(
    _In_ HDC hdc,
    _In_ UINT wchFirst,
    _In_ ULONG cwch,
    IN OPTIONAL PWCHAR pwch,
    _In_ FLONG fl,
    OUT PVOID pvBuf
);

W32KAPI
DWORD
APIENTRY
NtGdiGetCharacterPlacementW(
    _In_ HDC hdc,
    IN LPWSTR pwsz,
    _In_ INT nCount,
    _In_ INT nMaxExtent,
    IN OUT LPGCP_RESULTSW pgcpw,
    _In_ DWORD dwFlags
);

W32KAPI
BOOL
APIENTRY
NtGdiAngleArc(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y,
    _In_ DWORD dwRadius,
    _In_ DWORD dwStartAngle,
    _In_ DWORD dwSweepAngle);

W32KAPI
BOOL
APIENTRY
NtGdiBeginPath(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiSelectClipPath(
    _In_ HDC hdc,
    _In_ INT iMode);

W32KAPI
BOOL
APIENTRY
NtGdiCloseFigure(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiEndPath(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiAbortPath(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiFillPath(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiStrokeAndFillPath(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiStrokePath(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiWidenPath(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiFlattenPath(
    _In_ HDC hdc);

W32KAPI
NTSTATUS
APIENTRY
NtGdiFlushUserBatch(VOID);

W32KAPI
HRGN
APIENTRY
NtGdiPathToRegion(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiSetMiterLimit(
    _In_ HDC hdc,
    _In_ DWORD dwNew,
    _Out_opt_ PDWORD pdwOut);

W32KAPI
BOOL
APIENTRY
NtGdiSetFontXform(
    _In_ HDC hdc,
    _In_ DWORD dwxScale,
    _In_ DWORD dwyScale);

_Success_(return != FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiGetMiterLimit(
    _In_ HDC hdc,
    _Out_ PDWORD pdwOut);

W32KAPI
BOOL
APIENTRY
NtGdiEllipse(
    _In_ HDC hdc,
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom);

W32KAPI
BOOL
APIENTRY
NtGdiRectangle(
    _In_ HDC hdc,
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom);

W32KAPI
BOOL
APIENTRY
NtGdiRoundRect(
    _In_ HDC hdc,
    _In_ INT x1,
    _In_ INT y1,
    _In_ INT x2,
    _In_ INT y2,
    _In_ INT x3,
    _In_ INT y3);

W32KAPI
BOOL
APIENTRY
NtGdiPlgBlt(
    _In_ HDC hdcTrg,
    _In_ LPPOINT pptlTrg,
    _In_ HDC hdcSrc,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_ INT cxSrc,
    _In_ INT cySrc,
    _In_ HBITMAP hbmMask,
    _In_ INT xMask,
    _In_ INT yMask,
    _In_ DWORD crBackColor);

W32KAPI
BOOL
APIENTRY
NtGdiMaskBlt(
    _In_ HDC hdc,
    _In_ INT xDst,
    _In_ INT yDst,
    _In_ INT cx,
    _In_ INT cy,
    _In_ HDC hdcSrc,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_opt_ HBITMAP hbmMask,
    _In_ INT xMask,
    _In_ INT yMask,
    _In_ DWORD dwRop4,
    _In_ DWORD crBackColor);

W32KAPI
BOOL
APIENTRY
NtGdiExtFloodFill(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y,
    _In_ COLORREF crColor,
    _In_ UINT iFillType);

W32KAPI
BOOL
APIENTRY
NtGdiFillRgn(
    _In_ HDC hdc,
    _In_ HRGN hrgn,
    _In_ HBRUSH hbrush);

W32KAPI
BOOL
APIENTRY
NtGdiFrameRgn(
    _In_ HDC hdc,
    _In_ HRGN hrgn,
    _In_ HBRUSH hbrush,
    _In_ INT xWidth,
    _In_ INT yHeight);

W32KAPI
COLORREF
APIENTRY
NtGdiSetPixel(
    _In_ HDC hdcDst,
    _In_ INT x,
    _In_ INT y,
    _In_ COLORREF crColor);

W32KAPI
DWORD
APIENTRY
NtGdiGetPixel(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y);

W32KAPI
BOOL
APIENTRY
NtGdiStartPage(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiEndPage(
    _In_ HDC hdc);

W32KAPI
INT
APIENTRY
NtGdiStartDoc(
    _In_ HDC hdc,
    IN DOCINFOW *pdi,
    OUT BOOL *pbBanding,
    _In_ INT iJob
);

W32KAPI
BOOL
APIENTRY
NtGdiEndDoc(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiAbortDoc(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiUpdateColors(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiGetCharWidthW(
    _In_ HDC hdc,
    _In_ UINT wcFirst,
    _In_ UINT cwc,
    IN OPTIONAL PWCHAR pwc,
    _In_ FLONG fl,
    OUT PVOID pvBuf
);

W32KAPI
BOOL
APIENTRY
NtGdiGetCharWidthInfo(
    _In_ HDC hdc,
    OUT PCHWIDTHINFO pChWidthInfo
);

W32KAPI
INT
APIENTRY
NtGdiDrawEscape(
    _In_ HDC hdc,
    _In_ INT iEsc,
    _In_ INT cjIn,
    IN OPTIONAL LPSTR pjIn
);

W32KAPI
INT
APIENTRY
NtGdiExtEscape(
    _In_ HDC hdc,
    IN OPTIONAL PWCHAR pDriver,
    _In_ INT nDriver,
    _In_ INT iEsc,
    _In_ INT cjIn,
    IN OPTIONAL LPSTR pjIn,
    _In_ INT cjOut,
    OUT OPTIONAL LPSTR pjOut
);

W32KAPI
ULONG
APIENTRY
NtGdiGetFontData(
    _In_ HDC hdc,
    _In_ DWORD dwTable,
    _In_ DWORD dwOffset,
    OUT OPTIONAL PVOID pvBuf,
    _In_ ULONG cjBuf
);

W32KAPI
ULONG
APIENTRY
NtGdiGetGlyphOutline(
    _In_ HDC hdc,
    IN WCHAR wch,
    _In_ UINT iFormat,
    OUT LPGLYPHMETRICS pgm,
    _In_ ULONG cjBuf,
    OUT OPTIONAL PVOID pvBuf,
    IN LPMAT2 pmat2,
    _In_ BOOL bIgnoreRotation
);

W32KAPI
BOOL
APIENTRY
NtGdiGetETM(
    _In_ HDC hdc,
    OUT EXTTEXTMETRIC *petm
);

W32KAPI
BOOL
APIENTRY
NtGdiGetRasterizerCaps(
    OUT LPRASTERIZER_STATUS praststat,
    _In_ ULONG cjBytes
);

W32KAPI
ULONG
APIENTRY
NtGdiGetKerningPairs(
    _In_ HDC hdc,
    _In_ ULONG cPairs,
    OUT OPTIONAL KERNINGPAIR *pkpDst
);

W32KAPI
BOOL
APIENTRY
NtGdiMonoBitmap(
    _In_ HBITMAP hbm);

W32KAPI
HBITMAP
APIENTRY
NtGdiGetObjectBitmapHandle(
    _In_ HBRUSH hbr,
    OUT UINT *piUsage
);

W32KAPI
ULONG
APIENTRY
NtGdiEnumObjects(
    _In_ HDC hdc,
    _In_ INT iObjectType,
    _In_ ULONG cjBuf,
    OUT OPTIONAL PVOID pvBuf
);

// Note from SDK:
//
// NtGdiResetDC
// The exact size of the buffer at pdm is pdm->dmSize + pdm->dmDriverExtra.
// But this can't be specified with current annotation language.
//
// typedef struct _DRIVER_INFO_2W DRIVER_INFO_2W;
//
// :end note.
W32KAPI
BOOL
APIENTRY
NtGdiResetDC(
    _In_ HDC hdc,
    _In_ LPDEVMODEW pdm,
    OUT PBOOL pbBanding,
    IN OPTIONAL VOID *pDriverInfo2, // this is "typedef struct _DRIVER_INFO_2W DRIVER_INFO_2W;"
    OUT VOID *ppUMdhpdev
);

W32KAPI
DWORD
APIENTRY
NtGdiSetBoundsRect(
    _In_ HDC hdc,
    _In_ LPRECT prc,
    _In_ DWORD f);

W32KAPI
BOOL
APIENTRY
NtGdiGetColorAdjustment(
    _In_ HDC hdc,
    _Out_ PCOLORADJUSTMENT pcaOut);

W32KAPI
BOOL
APIENTRY
NtGdiSetColorAdjustment(
    _In_ HDC hdc,
    _In_ PCOLORADJUSTMENT pca);

W32KAPI
BOOL
APIENTRY
NtGdiCancelDC(
    _In_ HDC hdc);

W32KAPI
HDC
APIENTRY
NtGdiOpenDCW(
    IN OPTIONAL PUNICODE_STRING pustrDevice,
    IN DEVMODEW *pdm,  // See note for NtGdiResetDC
    IN PUNICODE_STRING pustrLogAddr,
    _In_ ULONG iType,
    _In_ BOOL bDisplay,
    IN OPTIONAL HANDLE hspool,
    IN OPTIONAL VOID *pDriverInfo2, // this is  "typedef struct _DRIVER_INFO_2W DRIVER_INFO_2W;"
    OUT VOID *pUMdhpdev
);

W32KAPI
BOOL
APIENTRY
NtGdiGetDCDword(
    _In_ HDC hdc,
    _In_ UINT u,
    OUT DWORD *Result
);

_Success_(return!=FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiGetDCPoint(
    _In_ HDC hdc,
    _In_ UINT iPoint,
    _Out_ PPOINTL pptOut);

W32KAPI
BOOL
APIENTRY
NtGdiScaleViewportExtEx(
    _In_ HDC hdc,
    _In_ INT xNum,
    _In_ INT xDenom,
    _In_ INT yNum,
    _In_ INT yDenom,
    OUT OPTIONAL LPSIZE pszOut
);

W32KAPI
BOOL
APIENTRY
NtGdiScaleWindowExtEx(
    _In_ HDC hdc,
    _In_ INT xNum,
    _In_ INT xDenom,
    _In_ INT yNum,
    _In_ INT yDenom,
    OUT OPTIONAL LPSIZE pszOut
);

W32KAPI
BOOL
APIENTRY
NtGdiSetVirtualResolution(
    _In_ HDC hdc,
    _In_ INT cxVirtualDevicePixel,
    _In_ INT cyVirtualDevicePixel,
    _In_ INT cxVirtualDeviceMm,
    _In_ INT cyVirtualDeviceMm);

W32KAPI
BOOL
APIENTRY
NtGdiSetSizeDevice(
    _In_ HDC hdc,
    _In_ INT cxVirtualDevice,
    _In_ INT cyVirtualDevice);

_Success_(return !=FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiGetTransform(
    _In_ HDC hdc,
    _In_ DWORD iXform,
    _Out_ LPXFORM pxf);

W32KAPI
BOOL
APIENTRY
NtGdiModifyWorldTransform(
    _In_ HDC hdc,
    _In_opt_ LPXFORM pxf,
    _In_ DWORD iXform);

W32KAPI
BOOL
APIENTRY
NtGdiCombineTransform(
    _Out_ LPXFORM pxfDst,
    _In_ LPXFORM pxfSrc1,
    _In_ LPXFORM pxfSrc2);

W32KAPI
BOOL
APIENTRY
NtGdiTransformPoints(
    _In_ HDC hdc,
    _In_reads_(c) PPOINT pptIn,
    _Out_writes_(c) PPOINT pptOut,
    _In_ INT c,
    _In_ INT iMode);

W32KAPI
LONG
APIENTRY
NtGdiConvertMetafileRect(
    _In_ HDC hdc,
    _Inout_ PRECTL prect);

W32KAPI
INT
APIENTRY
NtGdiGetTextCharsetInfo(
    _In_ HDC hdc,
    OUT OPTIONAL LPFONTSIGNATURE lpSig,
    _In_ DWORD dwFlags
);

W32KAPI
BOOL
APIENTRY
NtGdiDoBanding(
    _In_ HDC hdc,
    _In_ BOOL bStart,
    OUT POINTL *pptl,
    OUT PSIZE pSize
);

W32KAPI
ULONG
APIENTRY
NtGdiGetPerBandInfo(
    _In_ HDC hdc,
    IN OUT PERBANDINFO *ppbi
);

W32KAPI
NTSTATUS
APIENTRY
NtGdiGetStats(
    _In_ HANDLE hProcess,
    _In_ INT iIndex,
    _In_ INT iPidType,
    OUT PVOID pResults,
    _In_ UINT cjResultSize
);

W32KAPI
BOOL
APIENTRY
NtGdiSetMagicColors(
    _In_ HDC hdc,
    IN PALETTEENTRY peMagic,
    _In_ ULONG Index
);

W32KAPI
HBRUSH
APIENTRY
NtGdiSelectBrush(
    _In_ HDC hdc,
    _In_ HBRUSH hbrush
);

W32KAPI
HPEN
APIENTRY
NtGdiSelectPen(
    _In_ HDC hdc,
    _In_ HPEN hpen);

W32KAPI
HBITMAP
APIENTRY
NtGdiSelectBitmap(
    _In_ HDC hdc,
    _In_ HBITMAP hbm);

W32KAPI
HFONT
APIENTRY
NtGdiSelectFont(
    _In_ HDC hdc,
    _In_ HFONT hf);

W32KAPI
INT
APIENTRY
NtGdiExtSelectClipRgn(
    _In_ HDC hdc,
    _In_ HRGN hrgn,
    _In_ INT iMode);

W32KAPI
HPEN
APIENTRY
NtGdiCreatePen(
    _In_ INT iPenStyle,
    _In_ INT iPenWidth,
    _In_ COLORREF cr,
    _In_ HBRUSH hbr);

#ifdef _WINDOWBLT_NOTIFICATION_
W32KAPI
BOOL
APIENTRY
NtGdiBitBlt(
    _In_ HDC hdcDst,
    _In_ INT x,
    _In_ INT y,
    _In_ INT cx,
    _In_ INT cy,
    _In_ HDC hdcSrc,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_ DWORD rop4,
    _In_ DWORD crBackColor,
    _In_ FLONG fl);
#else
W32KAPI
BOOL
APIENTRY
NtGdiBitBlt(
    _In_ HDC hdcDst,
    _In_ INT x,
    _In_ INT y,
    _In_ INT cx,
    _In_ INT cy,
    _In_ HDC hdcSrc,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_ DWORD rop4,
    _In_ DWORD crBackColor);
#endif

W32KAPI
BOOL
APIENTRY
NtGdiTileBitBlt(
    _In_ HDC hdcDst,
    _In_ RECTL *prectDst,
    _In_ HDC hdcSrc,
    _In_ RECTL *prectSrc,
    _In_ POINTL *pptlOrigin,
    _In_ DWORD rop4,
    _In_ DWORD crBackColor);

W32KAPI
BOOL
APIENTRY
NtGdiTransparentBlt(
    _In_ HDC hdcDst,
    _In_ INT xDst,
    _In_ INT yDst,
    _In_ INT cxDst,
    _In_ INT cyDst,
    _In_ HDC hdcSrc,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_ INT cxSrc,
    _In_ INT cySrc,
    _In_ COLORREF TransColor);

W32KAPI
BOOL
APIENTRY
NtGdiGetTextExtent(
    _In_ HDC hdc,
    _In_z_count_(cwc) LPWSTR lpwsz,
    _In_ INT cwc,
    _Out_ LPSIZE psize,
    _In_ UINT flOpts);

_Success_(return != FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiGetTextMetricsW(
    _In_ HDC hdc,
    _Out_bytecap_(cj) TMW_INTERNAL * ptm,
    _In_ ULONG cj);

W32KAPI
INT
APIENTRY
NtGdiGetTextFaceW(
    _In_ HDC hdc,
    _In_ INT cChar,
    OUT OPTIONAL LPWSTR pszOut,
    _In_ BOOL bAliasName
);

W32KAPI
INT
APIENTRY
NtGdiGetRandomRgn(
    _In_ HDC hdc,
    _In_ HRGN hrgn,
    _In_ INT iRgn);

W32KAPI
BOOL
APIENTRY
NtGdiExtTextOutW(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y,
    _In_ UINT flOpts,
    IN OPTIONAL LPRECT prcl,
    _In_z_count_(cwc) LPWSTR pwsz,
    _In_ INT cwc,
    IN OPTIONAL LPINT pdx,
    _In_ DWORD dwCodePage
);

W32KAPI
INT
APIENTRY
NtGdiIntersectClipRect(
    _In_ HDC hdc,
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom);

W32KAPI
HRGN
APIENTRY
NtGdiCreateRectRgn(
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom);

W32KAPI
BOOL
APIENTRY
NtGdiPatBlt(
    _In_ HDC hdcDest,
    _In_ INT x,
    _In_ INT y,
    _In_ INT cx,
    _In_ INT cy,
    _In_ DWORD dwRop);

W32KAPI
BOOL
APIENTRY
NtGdiPolyPatBlt(
    _In_ HDC hdc,
    _In_ DWORD rop4,
    _In_ PPOLYPATBLT pPoly,
    _In_ DWORD Count,
    _In_ DWORD Mode);

W32KAPI
BOOL
APIENTRY
NtGdiUnrealizeObject(
    _In_ HANDLE h);

W32KAPI
HANDLE
APIENTRY
NtGdiGetStockObject(
    _In_ INT iObject);

W32KAPI
HBITMAP
APIENTRY
NtGdiCreateCompatibleBitmap(
    _In_ HDC hdc,
    _In_ INT cx,
    _In_ INT cy);

W32KAPI
BOOL
APIENTRY
NtGdiLineTo(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y);

_Success_(return != FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiMoveTo(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y,
    _Out_opt_ LPPOINT pptOut);

_Success_(return != 0)
W32KAPI
INT
APIENTRY
NtGdiExtGetObjectW(
    _In_ HANDLE h,
    _In_ INT cj,
    _Out_opt_bytecap_(cj) LPVOID pvOut);

W32KAPI
INT
APIENTRY
NtGdiGetDeviceCaps(
    _In_ HDC hdc,
    _In_ INT i);

_Success_(return!=FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiGetDeviceCapsAll (
    _In_ HDC hdc,
    _Out_ PDEVCAPS pDevCaps);

W32KAPI
BOOL
APIENTRY
NtGdiStretchBlt(
    _In_ HDC hdcDst,
    _In_ INT xDst,
    _In_ INT yDst,
    _In_ INT cxDst,
    _In_ INT cyDst,
    _In_ HDC hdcSrc,
    _In_ INT xSrc,
    _In_ INT ySrc,
    _In_ INT cxSrc,
    _In_ INT cySrc,
    _In_ DWORD dwRop,
    _In_ DWORD dwBackColor);

_Success_(return != FALSE)
W32KAPI
BOOL
APIENTRY
NtGdiSetBrushOrg(
    _In_ HDC hdc,
    _In_ INT x,
    _In_ INT y,
    _Out_opt_ LPPOINT pptOut);

W32KAPI
HBITMAP
APIENTRY
NtGdiCreateBitmap(
    _In_ INT cx,
    _In_ INT cy,
    _In_ UINT cPlanes,
    _In_ UINT cBPP,
    _In_opt_ LPBYTE pjInit);

W32KAPI
HPALETTE
APIENTRY
NtGdiCreateHalftonePalette(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiRestoreDC(
    _In_ HDC hdc,
    _In_ INT iLevel);

W32KAPI
INT
APIENTRY
NtGdiExcludeClipRect(
    _In_ HDC hdc,
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom);

W32KAPI
INT
APIENTRY
NtGdiSaveDC(
    _In_ HDC hdc);

W32KAPI
INT
APIENTRY
NtGdiCombineRgn(
    _In_ HRGN hrgnDst,
    _In_ HRGN hrgnSrc1,
    _In_opt_ HRGN hrgnSrc2,
    _In_ INT iMode);

W32KAPI
BOOL
APIENTRY
NtGdiSetRectRgn(
    _In_ HRGN hrgn,
    _In_ INT xLeft,
    _In_ INT yTop,
    _In_ INT xRight,
    _In_ INT yBottom);

W32KAPI
LONG
APIENTRY
NtGdiSetBitmapBits(
    _In_ HBITMAP hbm,
    _In_ ULONG cj,
    _In_bytecount_(cj) PBYTE pjInit);

W32KAPI
INT
APIENTRY
NtGdiGetDIBitsInternal(
    _In_ HDC hdc,
    _In_ HBITMAP hbm,
    _In_ UINT iStartScan,
    _In_ UINT cScans,
    _Out_opt_ LPBYTE pBits,
    _Inout_ LPBITMAPINFO pbmi,
    _In_ UINT iUsage,
    _In_ UINT cjMaxBits,
    _In_ UINT cjMaxInfo);

W32KAPI
INT
APIENTRY
NtGdiOffsetRgn(
    _In_ HRGN hrgn,
    _In_ INT cx,
    _In_ INT cy);

_Success_(return!=ERROR)
W32KAPI
INT
APIENTRY
NtGdiGetRgnBox(
    _In_ HRGN hrgn,
    _Out_ LPRECT prcOut);

W32KAPI
BOOL
APIENTRY
NtGdiRectInRegion(
    _In_ HRGN hrgn,
    IN OUT LPRECT prcl
);

_Success_(return!=0)
W32KAPI
DWORD
APIENTRY
NtGdiGetBoundsRect(
    _In_ HDC hdc,
    _Out_ LPRECT prc,
    _In_ DWORD f);

W32KAPI
BOOL
APIENTRY
NtGdiPtInRegion(
    _In_ HRGN hrgn,
    _In_ INT x,
    _In_ INT y);

W32KAPI
COLORREF
APIENTRY
NtGdiGetNearestColor(
    _In_ HDC hdc,
    _In_ COLORREF cr);

W32KAPI
UINT
APIENTRY
NtGdiGetSystemPaletteUse(
    _In_ HDC hdc);

W32KAPI
UINT
APIENTRY
NtGdiSetSystemPaletteUse(
    _In_ HDC hdc,
    _In_ UINT ui);

_Success_(return!=0)
W32KAPI
ULONG
APIENTRY
NtGdiGetRegionData(
    _In_ HRGN hrgn,
    _In_ ULONG cjBuffer,
    _Out_opt_bytecap_(cjBuffer) LPRGNDATA lpRgnData);

W32KAPI
BOOL
APIENTRY
NtGdiInvertRgn(
    _In_ HDC hdc,
    _In_ HRGN hrgn);

INT
W32KAPI
APIENTRY
NtGdiAddFontResourceW(
    _In_z_count_(cwc) WCHAR *pwszFiles,
    _In_ ULONG cwc,
    _In_ ULONG cFiles,
    _In_ FLONG f,
    _In_ DWORD dwPidTid,
    _In_opt_ DESIGNVECTOR *pdv);

#if (_WIN32_WINNT >= 0x0500)
W32KAPI
HFONT
APIENTRY
NtGdiHfontCreate(
    _In_bytecount_(cjElfw) ENUMLOGFONTEXDVW *pelfw,
    _In_ ULONG cjElfw,
    _In_ LFTYPE lft,
    _In_ FLONG fl,
    _In_ PVOID pvCliData);
#else
W32KAPI
HFONT
APIENTRY
NtGdiHfontCreate(
    _In_bytecount_(cjElfw) LPEXTLOGFONTW pelfw,
    _In_ ULONG cjElfw,
    _In_ LFTYPE lft,
    _In_ FLONG fl,
    _In_ PVOID pvCliData
);
#endif

W32KAPI
ULONG
APIENTRY
NtGdiSetFontEnumeration(
    _In_ ULONG ulType);

W32KAPI
BOOL
APIENTRY
NtGdiEnumFontClose(
    _In_ ULONG_PTR idEnum);

#if (_WIN32_WINNT >= 0x0500)
W32KAPI
BOOL
APIENTRY
NtGdiEnumFontChunk(
    _In_ HDC hdc,
    _In_ ULONG_PTR idEnum,
    _In_ ULONG cjEfdw,
    OUT ULONG *pcjEfdw,
    OUT PENUMFONTDATAW pefdw
);
#endif

W32KAPI
ULONG_PTR
APIENTRY
NtGdiEnumFontOpen(
    _In_ HDC hdc,
    _In_ ULONG iEnumType,
    _In_ FLONG flWin31Compat,
    _In_ ULONG cwchMax,
    IN OPTIONAL LPWSTR pwszFaceName,
    _In_ ULONG lfCharSet,
    OUT ULONG *pulCount
);

W32KAPI
INT
APIENTRY
NtGdiQueryFonts(
    OUT PUNIVERSAL_FONT_ID pufiFontList,
    _In_ ULONG nBufferSize,
    OUT PLARGE_INTEGER pTimeStamp
);

W32KAPI
BOOL
APIENTRY
NtGdiConsoleTextOut(
    _In_ HDC hdc,
    _In_ POLYTEXTW *lpto,
    _In_ UINT nStrings,
    _In_ RECTL *prclBounds);

W32KAPI
NTSTATUS
APIENTRY
NtGdiFullscreenControl(
    IN FULLSCREENCONTROL FullscreenCommand,
    IN PVOID FullscreenInput,
    _In_ DWORD FullscreenInputLength,
    OUT PVOID FullscreenOutput,
    IN OUT PULONG FullscreenOutputLength
);

W32KAPI
DWORD
APIENTRY
NtGdiGetCharSet(
    _In_ HDC hdc);

W32KAPI
BOOL
APIENTRY
NtGdiEnableEudc(
    _In_ BOOL b);

W32KAPI
BOOL
APIENTRY
NtGdiEudcLoadUnloadLink(
    IN OPTIONAL LPCWSTR pBaseFaceName,
    _In_ UINT cwcBaseFaceName,
    IN LPCWSTR pEudcFontPath,
    _In_ UINT cwcEudcFontPath,
    _In_ INT iPriority,
    _In_ INT iFontLinkType,
    _In_ BOOL bLoadLin
);

W32KAPI
UINT
APIENTRY
NtGdiGetStringBitmapW(
    _In_ HDC hdc,
    IN LPWSTR pwsz,
    _In_ UINT cwc,
    OUT BYTE *lpSB,
    _In_ UINT cj
);

W32KAPI
ULONG
APIENTRY
NtGdiGetEudcTimeStampEx(
    _In_opt_z_count_(cwcBaseFaceName) LPWSTR lpBaseFaceName,
    _In_ ULONG cwcBaseFaceName,
    _In_ BOOL bSystemTimeStamp);

W32KAPI
ULONG
APIENTRY
NtGdiQueryFontAssocInfo(
    _In_ HDC hdc);

#if (_WIN32_WINNT >= 0x0500)
W32KAPI
DWORD
APIENTRY
NtGdiGetFontUnicodeRanges(
    _In_ HDC hdc,
    _Out_opt_ LPGLYPHSET pgs);
#endif

#ifdef LANGPACK
W32KAPI
BOOL
APIENTRY
NtGdiGetRealizationInfo(
    _In_ HDC hdc,
    _Out_ PREALIZATION_INFO pri,
    _In_ HFONT hf);
#endif

W32KAPI
BOOL
APIENTRY
NtGdiAddRemoteMMInstanceToDC(
    _In_ HDC hdc,
    _In_ DOWNLOADDESIGNVECTOR *pddv,
    _In_ ULONG cjDDV);

W32KAPI
BOOL
APIENTRY
NtGdiUnloadPrinterDriver(
    _In_z_bytecount_(cbDriverName) LPWSTR pDriverName,
    _In_ ULONG cbDriverName);

W32KAPI
BOOL
APIENTRY
NtGdiEngAssociateSurface(
    _In_ HSURF hsurf,
    _In_ HDEV hdev,
    _In_ FLONG flHooks);

W32KAPI
BOOL
APIENTRY
NtGdiEngEraseSurface(
    _In_ SURFOBJ *pso,
    _In_ RECTL *prcl,
    _In_ ULONG iColor);

W32KAPI
HBITMAP
APIENTRY
NtGdiEngCreateBitmap(
    _In_ SIZEL sizl,
    _In_ LONG lWidth,
    _In_ ULONG iFormat,
    _In_ FLONG fl,
    _In_opt_ PVOID pvBits);

W32KAPI
BOOL
APIENTRY
NtGdiEngDeleteSurface(
    _In_ HSURF hsurf);

W32KAPI
SURFOBJ*
APIENTRY
NtGdiEngLockSurface(
    _In_ HSURF hsurf);

W32KAPI
VOID
APIENTRY
NtGdiEngUnlockSurface(
    _In_ SURFOBJ *pso);

W32KAPI
BOOL
APIENTRY
NtGdiEngMarkBandingSurface(
    _In_ HSURF hsurf);

W32KAPI
HSURF
APIENTRY
NtGdiEngCreateDeviceSurface(
    _In_ DHSURF dhsurf,
    _In_ SIZEL sizl,
    _In_ ULONG iFormatCompat);

W32KAPI
HBITMAP
APIENTRY
NtGdiEngCreateDeviceBitmap(
    _In_ DHSURF dhsurf,
    _In_ SIZEL sizl,
    _In_ ULONG iFormatCompat);

W32KAPI
BOOL
APIENTRY
NtGdiEngCopyBits(
    _In_ SURFOBJ *psoDst,
    _In_ SURFOBJ *psoSrc,
    _In_opt_ CLIPOBJ *pco,
    _In_opt_ XLATEOBJ *pxlo,
    _In_ RECTL *prclDst,
    _In_ POINTL *pptlSrc);

W32KAPI
BOOL
APIENTRY
NtGdiEngStretchBlt(
    _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);

W32KAPI
BOOL
APIENTRY
NtGdiEngBitBlt(
    _In_ SURFOBJ *psoTrg,
    _In_opt_ SURFOBJ *psoSrc,
    _In_opt_ SURFOBJ *psoMask,
    _In_opt_ CLIPOBJ *pco,
    _In_opt_ XLATEOBJ *pxlo,
    _In_ RECTL *prclTrg,
    _When_(psoSrc, _In_) POINTL *pptlSrc,
    _When_(psoMask, _In_) POINTL *pptlMask,
    _In_opt_ BRUSHOBJ *pbo,
    _When_(pbo, _In_) POINTL *pptlBrush,
    _In_ ROP4 rop4);

W32KAPI
BOOL
APIENTRY
NtGdiEngPlgBlt(
    _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_ ULONG iMode);

W32KAPI
HPALETTE
APIENTRY
NtGdiEngCreatePalette(
    _In_ ULONG iMode,
    _In_ ULONG cColors,
    _In_ ULONG *pulColors,
    _In_ FLONG flRed,
    _In_ FLONG flGreen,
    _In_ FLONG flBlue);

W32KAPI
BOOL
APIENTRY
NtGdiEngDeletePalette(
    _In_ HPALETTE hPal);

W32KAPI
BOOL
APIENTRY
NtGdiEngStrokePath(
    IN SURFOBJ *pso,
    IN PATHOBJ *ppo,
    IN CLIPOBJ *pco,
    IN XFORMOBJ *pxo,
    IN BRUSHOBJ *pbo,
    IN POINTL *pptlBrushOrg,
    IN LINEATTRS *plineattrs,
    IN MIX mix
);

W32KAPI
BOOL
APIENTRY
NtGdiEngFillPath(
    IN SURFOBJ *pso,
    IN PATHOBJ *ppo,
    IN CLIPOBJ *pco,
    IN BRUSHOBJ *pbo,
    IN POINTL *pptlBrushOrg,
    IN MIX mix,
    IN FLONG flOptions
);

W32KAPI
BOOL
APIENTRY
NtGdiEngStrokeAndFillPath(
    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 mix,
    IN FLONG flOptions
);

W32KAPI
BOOL
APIENTRY
NtGdiEngPaint(
    IN SURFOBJ *pso,
    IN CLIPOBJ *pco,
    IN BRUSHOBJ *pbo,
    IN POINTL *pptlBrushOrg,
    IN MIX mix
);

W32KAPI
BOOL
APIENTRY
NtGdiEngLineTo(
    IN SURFOBJ *pso,
    IN CLIPOBJ *pco,
    IN BRUSHOBJ *pbo,
    _In_ LONG x1,
    _In_ LONG y1,
    _In_ LONG x2,
    _In_ LONG y2,
    IN RECTL *prclBounds,
    IN MIX mix
);

W32KAPI
BOOL
APIENTRY
NtGdiEngAlphaBlend(
    IN SURFOBJ *psoDest,
    IN SURFOBJ *psoSrc,
    IN CLIPOBJ *pco,
    IN XLATEOBJ *pxlo,
    IN RECTL *prclDest,
    IN RECTL *prclSrc,
    IN BLENDOBJ *pBlendObj
);

W32KAPI
BOOL
APIENTRY
NtGdiEngGradientFill(
    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
);

W32KAPI
BOOL
APIENTRY
NtGdiEngTransparentBlt(
    IN SURFOBJ *psoDst,
    IN SURFOBJ *psoSrc,
    IN CLIPOBJ *pco,
    IN XLATEOBJ *pxlo,
    IN RECTL *prclDst,
    IN RECTL *prclSrc,
    _In_ ULONG iTransColor,
    _In_ ULONG ulReserved
);

W32KAPI
BOOL
APIENTRY
NtGdiEngTextOut(
    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
);

W32KAPI
BOOL
APIENTRY
NtGdiEngStretchBltROP(
    IN SURFOBJ *psoTrg,
    IN SURFOBJ *psoSrc,
    IN SURFOBJ *psoMask,
    IN CLIPOBJ *pco,
    IN XLATEOBJ *pxlo,
    IN COLORADJUSTMENT *pca,
    IN POINTL *pptlBrushOrg,
    IN RECTL *prclTrg,
    IN RECTL *prclSrc,
    IN POINTL *pptlMask,
    _In_ ULONG iMode,
    IN BRUSHOBJ *pbo,
    IN ROP4 rop4
);

W32KAPI
ULONG
APIENTRY
NtGdiXLATEOBJ_cGetPalette(
    IN XLATEOBJ *pxlo,
    _In_ ULONG iPal,
    _In_ ULONG cPal,
    OUT ULONG *pPal
);

W32KAPI
ULONG
APIENTRY
NtGdiCLIPOBJ_cEnumStart(
    IN CLIPOBJ *pco,
    _In_ BOOL bAll,
    _In_ ULONG iType,
    _In_ ULONG iDirection,
    _In_ ULONG cLimit
);

W32KAPI
BOOL
APIENTRY
NtGdiCLIPOBJ_bEnum(
    IN CLIPOBJ *pco,
    _In_ ULONG cj,
    OUT ULONG *pul
);

W32KAPI
PATHOBJ*
APIENTRY
NtGdiCLIPOBJ_ppoGetPath(
    IN CLIPOBJ *pco
);

W32KAPI
CLIPOBJ*
APIENTRY
NtGdiEngCreateClip(VOID);

W32KAPI
VOID
APIENTRY
NtGdiEngDeleteClip(
    IN CLIPOBJ*pco
);

W32KAPI
PVOID
APIENTRY
NtGdiBRUSHOBJ_pvAllocRbrush(
    IN BRUSHOBJ *pbo,
    _In_ ULONG cj
);

W32KAPI
PVOID
APIENTRY
NtGdiBRUSHOBJ_pvGetRbrush(
    IN BRUSHOBJ *pbo
);

W32KAPI
ULONG
APIENTRY
NtGdiBRUSHOBJ_ulGetBrushColor(
    IN BRUSHOBJ *pbo
);

W32KAPI
HANDLE
APIENTRY
NtGdiBRUSHOBJ_hGetColorTransform(
    IN BRUSHOBJ *pbo
);

W32KAPI
BOOL
APIENTRY
NtGdiXFORMOBJ_bApplyXform(
    IN XFORMOBJ *pxo,
    _In_ ULONG iMode,
    _In_ ULONG cPoints,
    IN  PVOID pvIn,
    OUT PVOID pvOut
);

W32KAPI
ULONG
APIENTRY
NtGdiXFORMOBJ_iGetXform(
    IN XFORMOBJ *pxo,
    OUT OPTIONAL XFORML *pxform
);

W32KAPI
VOID
APIENTRY
NtGdiFONTOBJ_vGetInfo(
    IN FONTOBJ *pfo,
    _In_ ULONG cjSize,
    OUT FONTINFO *pfi
);

W32KAPI
ULONG
APIENTRY
NtGdiFONTOBJ_cGetGlyphs(
    IN FONTOBJ *pfo,
    _In_ ULONG iMode,
    _In_ ULONG cGlyph,
    IN HGLYPH *phg,
    OUT PVOID *ppvGlyph
);

W32KAPI
XFORMOBJ*
APIENTRY
NtGdiFONTOBJ_pxoGetXform(
    IN FONTOBJ *pfo
);

W32KAPI
IFIMETRICS*
APIENTRY
NtGdiFONTOBJ_pifi(
    IN FONTOBJ *pfo
);

W32KAPI
FD_GLYPHSET*
APIENTRY
NtGdiFONTOBJ_pfdg(
    IN FONTOBJ *pfo
);

W32KAPI
ULONG
APIENTRY
NtGdiFONTOBJ_cGetAllGlyphHandles(
    IN FONTOBJ *pfo,
    OUT OPTIONAL HGLYPH *phg
);

W32KAPI
PVOID
APIENTRY
NtGdiFONTOBJ_pvTrueTypeFontFile(
    IN FONTOBJ *pfo,
    OUT ULONG *pcjFile
);

W32KAPI
PFD_GLYPHATTR
APIENTRY
NtGdiFONTOBJ_pQueryGlyphAttrs(
    IN FONTOBJ *pfo,
    _In_ ULONG iMode
);

W32KAPI
BOOL
APIENTRY
NtGdiSTROBJ_bEnum(
    IN STROBJ *pstro,
    OUT ULONG *pc,
    OUT PGLYPHPOS *ppgpos
);

W32KAPI
BOOL
APIENTRY
NtGdiSTROBJ_bEnumPositionsOnly(
    IN STROBJ *pstro,
    OUT ULONG *pc,
    OUT PGLYPHPOS *ppgpos
);

W32KAPI
VOID
APIENTRY
NtGdiSTROBJ_vEnumStart(
    _Inout_ STROBJ *pstro);

W32KAPI
DWORD
APIENTRY
NtGdiSTROBJ_dwGetCodePage(
    IN STROBJ *pstro
);

W32KAPI
BOOL
APIENTRY
NtGdiSTROBJ_bGetAdvanceWidths(
    IN STROBJ*pstro,
    _In_ ULONG iFirst,
    _In_ ULONG c,
    OUT POINTQF*pptqD
);

W32KAPI
FD_GLYPHSET*
APIENTRY
NtGdiEngComputeGlyphSet(
    _In_ INT nCodePage,
    _In_ INT nFirstChar,
    _In_ INT cChars
);

W32KAPI
ULONG
APIENTRY
NtGdiXLATEOBJ_iXlate(
    IN XLATEOBJ *pxlo,
    _In_ ULONG iColor
);

W32KAPI
HANDLE
APIENTRY
NtGdiXLATEOBJ_hGetColorTransform(
    IN XLATEOBJ *pxlo
);

W32KAPI
VOID
APIENTRY
NtGdiPATHOBJ_vGetBounds(
    IN PATHOBJ *ppo,
    OUT PRECTFX prectfx
);

W32KAPI
BOOL
APIENTRY
NtGdiPATHOBJ_bEnum(
    IN PATHOBJ *ppo,
    OUT PATHDATA *ppd
);

W32KAPI
VOID
APIENTRY
NtGdiPATHOBJ_vEnumStart(
    IN PATHOBJ *ppo
);

W32KAPI
VOID
APIENTRY
NtGdiEngDeletePath(
    IN PATHOBJ *ppo
);

W32KAPI
VOID
APIENTRY
NtGdiPATHOBJ_vEnumStartClipLines(
    IN PATHOBJ *ppo,
    IN CLIPOBJ *pco,
    IN SURFOBJ *pso,
    IN LINEATTRS *pla
);

W32KAPI
BOOL
APIENTRY
NtGdiPATHOBJ_bEnumClipLines(
    IN PATHOBJ *ppo,
    _In_ ULONG cb,
    OUT CLIPLINE *pcl
);

W32KAPI
BOOL
APIENTRY
NtGdiEngCheckAbort(
    IN SURFOBJ *pso
);

W32KAPI
DHPDEV
APIENTRY
NtGdiGetDhpdev(
    IN HDEV hdev
);

W32KAPI
LONG
APIENTRY
NtGdiHT_Get8BPPFormatPalette(
    OUT OPTIONAL LPPALETTEENTRY pPaletteEntry,
    IN USHORT RedGamma,
    IN USHORT GreenGamma,
    IN USHORT BlueGamma
);

W32KAPI
LONG
APIENTRY
NtGdiHT_Get8BPPMaskPalette(
    OUT OPTIONAL LPPALETTEENTRY pPaletteEntry,
    _In_ BOOL Use8BPPMaskPal,
    IN BYTE CMYMask,
    IN USHORT RedGamma,
    IN USHORT GreenGamma,
    IN USHORT BlueGamma
);

W32KAPI
BOOL
APIENTRY
NtGdiUpdateTransform(
    _In_ HDC hdc
);

W32KAPI
DWORD
APIENTRY
NtGdiSetLayout(
    _In_ HDC hdc,
    _In_ LONG wox,
    _In_ DWORD dwLayout
);

W32KAPI
BOOL
APIENTRY
NtGdiMirrorWindowOrg(
    _In_ HDC hdc
);

W32KAPI
LONG
APIENTRY
NtGdiGetDeviceWidth(
    _In_ HDC hdc
);

W32KAPI
BOOL
APIENTRY
NtGdiSetPUMPDOBJ(
    IN HUMPD humpd,
    _In_ BOOL bStoreID,
    OUT HUMPD *phumpd,
    OUT BOOL *pbWOW64
);

W32KAPI
BOOL
APIENTRY
NtGdiBRUSHOBJ_DeleteRbrush(
    IN BRUSHOBJ *pbo,
    IN BRUSHOBJ *pboB
);

W32KAPI
BOOL
APIENTRY
NtGdiUMPDEngFreeUserMem(
    IN KERNEL_PVOID *ppv
);

W32KAPI
HBITMAP
APIENTRY
NtGdiSetBitmapAttributes(
    IN HBITMAP hbm,
    _In_ DWORD dwFlags
);

W32KAPI
HBITMAP
APIENTRY
NtGdiClearBitmapAttributes(
    IN HBITMAP hbm,
    _In_ DWORD dwFlags
);

W32KAPI
HBRUSH
APIENTRY
NtGdiSetBrushAttributes(
    _In_ HBRUSH hbm,
    _In_ DWORD dwFlags
);

W32KAPI
HBRUSH
APIENTRY
NtGdiClearBrushAttributes(
    _In_ HBRUSH hbm,
    _In_ DWORD dwFlags
);

W32KAPI
BOOL
APIENTRY
NtGdiDrawStream(
    _In_ HDC hdcDst,
    _In_ ULONG cjIn,
    IN VOID *pvIn
);

W32KAPI
BOOL
APIENTRY
NtGdiMakeObjectXferable(
    _In_ HANDLE h,
    _In_ DWORD dwProcessId
);

W32KAPI
BOOL
APIENTRY
NtGdiMakeObjectUnXferable(
    _In_ HANDLE h
);

W32KAPI
BOOL
APIENTRY
NtGdiInitSpool(VOID);

/* FIXME wrong prototypes fix the build */
W32KAPI
INT
APIENTRY
NtGdiGetSpoolMessage( DWORD u1,
                      DWORD u2,
                      DWORD u3,
                      DWORD u4);
#endif