ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

winddi.h
Go to the documentation of this file.
00001 /*
00002  * winddi.h
00003  *
00004  * GDI device driver interface
00005  *
00006  * This file is part of the w32api package.
00007  *
00008  * Contributors:
00009  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
00010  *   Annotations by Timo Kreuzer <timo.kreuzer@reactos.org>
00011  *
00012  * THIS SOFTWARE IS NOT COPYRIGHTED
00013  *
00014  * This source code is offered for use in the public domain. You may
00015  * use, modify or distribute it freely.
00016  *
00017  * This code is distributed in the hope that it will be useful but
00018  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
00019  * DISCLAIMED. This includes but is not limited to warranties of
00020  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00021  *
00022  */
00023 
00024 #ifndef _WINDDI_
00025 #define _WINDDI_
00026 #pragma once
00027 
00028 #ifdef __VIDEO_H__
00029 #error video.h cannot be included with winddi.h
00030 #else
00031 
00032 #include <ddrawint.h>
00033 #include <d3dnthal.h>
00034 #include <specstrings.h>
00035 
00036 #ifdef __cplusplus
00037 extern "C" {
00038 #endif
00039 
00040 #ifndef DECLSPEC_IMPORT
00041 #define DECLSPEC_IMPORT __attribute__((dllimport))
00042 #endif
00043 
00044 #ifndef WIN32KAPI
00045 #define WIN32KAPI DECLSPEC_ADDRSAFE
00046 #endif
00047 
00048 #define DDI_DRIVER_VERSION_NT4            0x00020000
00049 #define DDI_DRIVER_VERSION_SP3            0x00020003
00050 #define DDI_DRIVER_VERSION_NT5            0x00030000
00051 #define DDI_DRIVER_VERSION_NT5_01         0x00030100
00052 #define DDI_DRIVER_VERSION_NT5_01_SP1     0x00030101
00053 
00054 #define GDI_DRIVER_VERSION                0x4000
00055 
00056 #if defined(_X86_) && !defined(USERMODE_DRIVER) && !defined(BUILD_WOW6432)
00057 typedef DWORD FLOATL;
00058 #else
00059 typedef FLOAT FLOATL;
00060 #endif
00061 
00062 typedef SHORT FWORD;
00063 typedef LONG LDECI4;
00064 typedef ULONG IDENT;
00065 
00066 typedef ULONG_PTR HFF;
00067 typedef ULONG_PTR HFC;
00068 
00069 typedef LONG PTRDIFF;
00070 typedef PTRDIFF *PPTRDIFF;
00071 typedef LONG FIX;
00072 typedef FIX *PFIX;
00073 typedef ULONG ROP4;
00074 typedef ULONG MIX;
00075 typedef ULONG HGLYPH;
00076 typedef HGLYPH *PHGLYPH;
00077 
00078 typedef LONG_PTR (APIENTRY *PFN)();
00079 
00080 DECLARE_HANDLE(HBM);
00081 DECLARE_HANDLE(HDEV);
00082 DECLARE_HANDLE(HSURF);
00083 DECLARE_HANDLE(DHSURF);
00084 DECLARE_HANDLE(DHPDEV);
00085 DECLARE_HANDLE(HDRVOBJ);
00086 
00087 #ifndef _NTDDVDEO_
00088 typedef struct _ENG_EVENT *PEVENT;
00089 #endif
00090 
00091 #define OPENGL_CMD                        4352
00092 #define OPENGL_GETINFO                    4353
00093 #define WNDOBJ_SETUP                      4354
00094 
00095 #define FD_ERROR                          0xFFFFFFFF
00096 #define DDI_ERROR                         0xFFFFFFFF
00097 
00098 #define HFF_INVALID                       ((HFF) 0)
00099 #define HFC_INVALID                       ((HFC) 0)
00100 #define HGLYPH_INVALID                    ((HGLYPH) -1)
00101 
00102 #define FP_ALTERNATEMODE                  1
00103 #define FP_WINDINGMODE                    2
00104 
00105 #define DN_ACCELERATION_LEVEL             1
00106 #define DN_DEVICE_ORIGIN                  2
00107 #define DN_SLEEP_MODE                     3
00108 #define DN_DRAWING_BEGIN                  4
00109 
00110 #define DCR_SOLID                         0
00111 #define DCR_DRIVER                        1
00112 #define DCR_HALFTONE                      2
00113 
00114 #define GX_IDENTITY                       0
00115 #define GX_OFFSET                         1
00116 #define GX_SCALE                          2
00117 #define GX_GENERAL                        3
00118 
00119 #define LTOFX(x)        ((x) << 4)
00120 #define FXTOL(x)        ((x) >> 4)
00121 #define FXTOLFLOOR(x)   ((x) >> 4)
00122 #define FXTOLCEILING(x) ((x + 0x0F) >> 4)
00123 #define FXTOLROUND(x)   ((((x) >> 3) + 1) >> 1)
00124 
00125 typedef struct _POINTE {
00126     FLOATL  x;
00127     FLOATL  y;
00128 } POINTE, *PPOINTE;
00129 
00130 typedef union _FLOAT_LONG {
00131   FLOATL  e;
00132   LONG  l;
00133 } FLOAT_LONG, *PFLOAT_LONG;
00134 
00135 typedef struct _POINTFIX {
00136   FIX  x;
00137   FIX  y;
00138 } POINTFIX, *PPOINTFIX;
00139 
00140 typedef struct _RECTFX {
00141   FIX  xLeft;
00142   FIX  yTop;
00143   FIX  xRight;
00144   FIX  yBottom;
00145 } RECTFX, *PRECTFX;
00146 
00147 typedef struct _POINTQF {
00148   LARGE_INTEGER  x;
00149   LARGE_INTEGER  y;
00150 } POINTQF, *PPOINTQF;
00151 
00152 
00153 typedef struct _BLENDOBJ {
00154   BLENDFUNCTION  BlendFunction;
00155 } BLENDOBJ,*PBLENDOBJ;
00156 
00157 /* BRUSHOBJ.flColorType */
00158 #define BR_DEVICE_ICM    0x01
00159 #define BR_HOST_ICM      0x02
00160 #define BR_CMYKCOLOR     0x04
00161 #define BR_ORIGCOLOR     0x08
00162 
00163 typedef struct _BRUSHOBJ {
00164   ULONG  iSolidColor;
00165   PVOID  pvRbrush;
00166   FLONG  flColorType;
00167 } BRUSHOBJ;
00168 
00169 typedef struct _CIECHROMA {
00170   LDECI4  x;
00171   LDECI4  y;
00172   LDECI4  Y;
00173 } CIECHROMA;
00174 
00175 typedef struct _RUN {
00176   LONG  iStart;
00177   LONG  iStop;
00178 } RUN, *PRUN;
00179 
00180 typedef struct _CLIPLINE {
00181   POINTFIX  ptfxA;
00182   POINTFIX  ptfxB;
00183   LONG  lStyleState;
00184   ULONG  c;
00185   _Field_size_(c) RUN  arun[1];
00186 } CLIPLINE, *PCLIPLINE;
00187 
00188 /* CLIPOBJ.iDComplexity constants */
00189 #define DC_TRIVIAL                        0
00190 #define DC_RECT                           1
00191 #define DC_COMPLEX                        3
00192 
00193 /* CLIPOBJ.iFComplexity constants */
00194 #define FC_RECT                           1
00195 #define FC_RECT4                          2
00196 #define FC_COMPLEX                        3
00197 
00198 /* CLIPOBJ.iMode constants */
00199 #define TC_RECTANGLES                     0
00200 #define TC_PATHOBJ                        2
00201 
00202 /* CLIPOBJ.fjOptions constants */
00203 #define OC_BANK_CLIP                      1
00204 
00205 typedef struct _CLIPOBJ {
00206   ULONG  iUniq;
00207   RECTL  rclBounds;
00208   BYTE  iDComplexity;
00209   BYTE  iFComplexity;
00210   BYTE  iMode;
00211   BYTE  fjOptions;
00212 } CLIPOBJ;
00213 
00214 typedef struct _COLORINFO {
00215   CIECHROMA  Red;
00216   CIECHROMA  Green;
00217   CIECHROMA  Blue;
00218   CIECHROMA  Cyan;
00219   CIECHROMA  Magenta;
00220   CIECHROMA  Yellow;
00221   CIECHROMA  AlignmentWhite;
00222   LDECI4  RedGamma;
00223   LDECI4  GreenGamma;
00224   LDECI4  BlueGamma;
00225   LDECI4  MagentaInCyanDye;
00226   LDECI4  YellowInCyanDye;
00227   LDECI4  CyanInMagentaDye;
00228   LDECI4  YellowInMagentaDye;
00229   LDECI4  CyanInYellowDye;
00230   LDECI4  MagentaInYellowDye;
00231 } COLORINFO, *PCOLORINFO;
00232 
00233 /* DEVHTADJDATA.DeviceFlags constants */
00234 #define DEVHTADJF_COLOR_DEVICE            0x00000001
00235 #define DEVHTADJF_ADDITIVE_DEVICE         0x00000002
00236 
00237 typedef struct _DEVHTINFO {
00238   DWORD  HTFlags;
00239   DWORD  HTPatternSize;
00240   DWORD  DevPelsDPI;
00241   COLORINFO  ColorInfo;
00242 } DEVHTINFO, *PDEVHTINFO;
00243 
00244 typedef struct _DEVHTADJDATA {
00245   DWORD   DeviceFlags;
00246   DWORD   DeviceXDPI;
00247   DWORD   DeviceYDPI;
00248   PDEVHTINFO  pDefHTInfo;
00249   PDEVHTINFO  pAdjHTInfo;
00250 } DEVHTADJDATA, *PDEVHTADJDATA;
00251 
00252 /* DEVINFO.flGraphicsCaps flags */
00253 #define GCAPS_BEZIERS           0x00000001
00254 #define GCAPS_GEOMETRICWIDE     0x00000002
00255 #define GCAPS_ALTERNATEFILL     0x00000004
00256 #define GCAPS_WINDINGFILL       0x00000008
00257 #define GCAPS_HALFTONE          0x00000010
00258 #define GCAPS_COLOR_DITHER      0x00000020
00259 #define GCAPS_HORIZSTRIKE       0x00000040
00260 #define GCAPS_VERTSTRIKE        0x00000080
00261 #define GCAPS_OPAQUERECT        0x00000100
00262 #define GCAPS_VECTORFONT        0x00000200
00263 #define GCAPS_MONO_DITHER       0x00000400
00264 #define GCAPS_ASYNCCHANGE       0x00000800
00265 #define GCAPS_ASYNCMOVE         0x00001000
00266 #define GCAPS_DONTJOURNAL       0x00002000
00267 #define GCAPS_DIRECTDRAW        0x00004000
00268 #define GCAPS_ARBRUSHOPAQUE     0x00008000
00269 #define GCAPS_PANNING           0x00010000
00270 #define GCAPS_HIGHRESTEXT       0x00040000
00271 #define GCAPS_PALMANAGED        0x00080000
00272 #define GCAPS_DITHERONREALIZE   0x00200000
00273 #define GCAPS_NO64BITMEMACCESS  0x00400000
00274 #define GCAPS_FORCEDITHER       0x00800000
00275 #define GCAPS_GRAY16            0x01000000
00276 #define GCAPS_ICM               0x02000000
00277 #define GCAPS_CMYKCOLOR         0x04000000
00278 #define GCAPS_LAYERED           0x08000000
00279 #define GCAPS_ARBRUSHTEXT       0x10000000
00280 #define GCAPS_SCREENPRECISION   0x20000000
00281 #define GCAPS_FONT_RASTERIZER   0x40000000
00282 #define GCAPS_NUP               0x80000000
00283 
00284 /* DEVINFO.iDitherFormat constants */
00285 #define BMF_1BPP       1L
00286 #define BMF_4BPP       2L
00287 #define BMF_8BPP       3L
00288 #define BMF_16BPP      4L
00289 #define BMF_24BPP      5L
00290 #define BMF_32BPP      6L
00291 #define BMF_4RLE       7L
00292 #define BMF_8RLE       8L
00293 #define BMF_JPEG       9L
00294 #define BMF_PNG       10L
00295 
00296 /* DEVINFO.flGraphicsCaps2 flags */
00297 #define GCAPS2_JPEGSRC          0x00000001
00298 #define GCAPS2_xxxx             0x00000002
00299 #define GCAPS2_PNGSRC           0x00000008
00300 #define GCAPS2_CHANGEGAMMARAMP  0x00000010
00301 #define GCAPS2_ALPHACURSOR      0x00000020
00302 #define GCAPS2_SYNCFLUSH        0x00000040
00303 #define GCAPS2_SYNCTIMER        0x00000080
00304 #define GCAPS2_ICD_MULTIMON     0x00000100
00305 #define GCAPS2_MOUSETRAILS      0x00000200
00306 #define GCAPS2_RESERVED1        0x00000400
00307 
00308 typedef struct _DEVINFO {
00309   FLONG  flGraphicsCaps;
00310   LOGFONTW  lfDefaultFont;
00311   LOGFONTW  lfAnsiVarFont;
00312   LOGFONTW  lfAnsiFixFont;
00313   ULONG  cFonts;
00314   ULONG  iDitherFormat;
00315   USHORT  cxDither;
00316   USHORT  cyDither;
00317   HPALETTE  hpalDefault;
00318   FLONG  flGraphicsCaps2;
00319 } DEVINFO, *PDEVINFO;
00320 
00321 struct _DRIVEROBJ;
00322 
00323 typedef BOOL
00324 (APIENTRY CALLBACK *FREEOBJPROC)(
00325     _In_ struct _DRIVEROBJ  *pDriverObj);
00326 
00327 typedef struct _DRIVEROBJ {
00328   PVOID  pvObj;
00329   FREEOBJPROC  pFreeProc;
00330   HDEV  hdev;
00331   DHPDEV  dhpdev;
00332 } DRIVEROBJ;
00333 
00334 /* DRVFN.iFunc constants */
00335 #define INDEX_DrvEnablePDEV               0L
00336 #define INDEX_DrvCompletePDEV             1L
00337 #define INDEX_DrvDisablePDEV              2L
00338 #define INDEX_DrvEnableSurface            3L
00339 #define INDEX_DrvDisableSurface           4L
00340 #define INDEX_DrvAssertMode               5L
00341 #define INDEX_DrvOffset                   6L
00342 #define INDEX_DrvResetPDEV                7L
00343 #define INDEX_DrvDisableDriver            8L
00344 #define INDEX_DrvUnknown1                 9L
00345 #define INDEX_DrvCreateDeviceBitmap       10L
00346 #define INDEX_DrvDeleteDeviceBitmap       11L
00347 #define INDEX_DrvRealizeBrush             12L
00348 #define INDEX_DrvDitherColor              13L
00349 #define INDEX_DrvStrokePath               14L
00350 #define INDEX_DrvFillPath                 15L
00351 #define INDEX_DrvStrokeAndFillPath        16L
00352 #define INDEX_DrvPaint                    17L
00353 #define INDEX_DrvBitBlt                   18L
00354 #define INDEX_DrvCopyBits                 19L
00355 #define INDEX_DrvStretchBlt               20L
00356 #define INDEX_DrvUnknown2                 21L
00357 #define INDEX_DrvSetPalette               22L
00358 #define INDEX_DrvTextOut                  23L
00359 #define INDEX_DrvEscape                   24L
00360 #define INDEX_DrvDrawEscape               25L
00361 #define INDEX_DrvQueryFont                26L
00362 #define INDEX_DrvQueryFontTree            27L
00363 #define INDEX_DrvQueryFontData            28L
00364 #define INDEX_DrvSetPointerShape          29L
00365 #define INDEX_DrvMovePointer              30L
00366 #define INDEX_DrvLineTo                   31L
00367 #define INDEX_DrvSendPage                 32L
00368 #define INDEX_DrvStartPage                33L
00369 #define INDEX_DrvEndDoc                   34L
00370 #define INDEX_DrvStartDoc                 35L
00371 #define INDEX_DrvUnknown3                 36L
00372 #define INDEX_DrvGetGlyphMode             37L
00373 #define INDEX_DrvSynchronize              38L
00374 #define INDEX_DrvUnknown4                 39L
00375 #define INDEX_DrvSaveScreenBits           40L
00376 #define INDEX_DrvGetModes                 41L
00377 #define INDEX_DrvFree                     42L
00378 #define INDEX_DrvDestroyFont              43L
00379 #define INDEX_DrvQueryFontCaps            44L
00380 #define INDEX_DrvLoadFontFile             45L
00381 #define INDEX_DrvUnloadFontFile           46L
00382 #define INDEX_DrvFontManagement           47L
00383 #define INDEX_DrvQueryTrueTypeTable       48L
00384 #define INDEX_DrvQueryTrueTypeOutline     49L
00385 #define INDEX_DrvGetTrueTypeFile          50L
00386 #define INDEX_DrvQueryFontFile            51L
00387 #define INDEX_DrvMovePanning              52L
00388 #define INDEX_DrvQueryAdvanceWidths       53L
00389 #define INDEX_DrvSetPixelFormat           54L
00390 #define INDEX_DrvDescribePixelFormat      55L
00391 #define INDEX_DrvSwapBuffers              56L
00392 #define INDEX_DrvStartBanding             57L
00393 #define INDEX_DrvNextBand                 58L
00394 #define INDEX_DrvGetDirectDrawInfo        59L
00395 #define INDEX_DrvEnableDirectDraw         60L
00396 #define INDEX_DrvDisableDirectDraw        61L
00397 #define INDEX_DrvQuerySpoolType           62L
00398 #define INDEX_DrvUnknown5                 63L
00399 #define INDEX_DrvIcmCreateColorTransform  64L
00400 #define INDEX_DrvIcmDeleteColorTransform  65L
00401 #define INDEX_DrvIcmCheckBitmapBits       66L
00402 #define INDEX_DrvIcmSetDeviceGammaRamp    67L
00403 #define INDEX_DrvGradientFill             68L
00404 #define INDEX_DrvStretchBltROP            69L
00405 #define INDEX_DrvPlgBlt                   70L
00406 #define INDEX_DrvAlphaBlend               71L
00407 #define INDEX_DrvSynthesizeFont           72L
00408 #define INDEX_DrvGetSynthesizedFontFiles  73L
00409 #define INDEX_DrvTransparentBlt           74L
00410 #define INDEX_DrvQueryPerBandInfo         75L
00411 #define INDEX_DrvQueryDeviceSupport       76L
00412 #define INDEX_DrvReserved1                77L
00413 #define INDEX_DrvReserved2                78L
00414 #define INDEX_DrvReserved3                79L
00415 #define INDEX_DrvReserved4                80L
00416 #define INDEX_DrvReserved5                81L
00417 #define INDEX_DrvReserved6                82L
00418 #define INDEX_DrvReserved7                83L
00419 #define INDEX_DrvReserved8                84L
00420 #define INDEX_DrvDeriveSurface            85L
00421 #define INDEX_DrvQueryGlyphAttrs          86L
00422 #define INDEX_DrvNotify                   87L
00423 #define INDEX_DrvSynchronizeSurface       88L
00424 #define INDEX_DrvResetDevice              89L
00425 #define INDEX_DrvReserved9                90L
00426 #define INDEX_DrvReserved10               91L
00427 #define INDEX_DrvReserved11               92L
00428 #if (NTDDI_VERSION >= NTDDI_VISTA)
00429 #define INDEX_DrvRenderHint               93L
00430 #if (NTDDI_VERSION >= NTDDI_WIN7)
00431 #define INDEX_DrvCreateDeviceBitmapEx     94L
00432 #define INDEX_DrvDeleteDeviceBitmapEx     95L
00433 #define INDEX_DrvAssociateSharedSurface   96L
00434 #define INDEX_DrvSynchronizeRedirectionBitmaps  97L
00435 #define INDEX_DrvAccumulateD3DDirtyRect   98L
00436 #define INDEX_DrvStartDxInterop           99L
00437 #define INDEX_DrvEndDxInterop            100L
00438 #define INDEX_DrvLockDisplayArea         101L
00439 #define INDEX_DrvUnlockDisplayArea       102L
00440 #define INDEX_LAST                       103L
00441 #else /* (NTDDI_VERSION >= NTDDI_WIN7) */
00442 #define INDEX_LAST                        94L
00443 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
00444 #else /* (NTDDI_VERSION >= NTDDI_VISTA) */
00445 #define INDEX_LAST                        93L
00446 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
00447 
00448 typedef struct _DRVFN {
00449   ULONG  iFunc;
00450   PFN  pfn;
00451 } DRVFN, *PDRVFN;
00452 
00453 /* DRVENABLEDATA.iDriverVersion constants */
00454 #define DDI_DRIVER_VERSION_NT4            0x00020000
00455 #define DDI_DRIVER_VERSION_SP3            0x00020003
00456 #define DDI_DRIVER_VERSION_NT5            0x00030000
00457 #define DDI_DRIVER_VERSION_NT5_01         0x00030100
00458 #define DDI_DRIVER_VERSION_NT5_01_SP1     0x00030101
00459 
00460 typedef struct _DRVENABLEDATA {
00461   ULONG  iDriverVersion;
00462   ULONG  c;
00463   DRVFN  *pdrvfn;
00464 } DRVENABLEDATA, *PDRVENABLEDATA;
00465 
00466 DECLARE_HANDLE(HSEMAPHORE);
00467 
00468 typedef struct {
00469   DWORD  nSize;
00470   HDC  hdc;
00471   PBYTE  pvEMF;
00472   PBYTE  pvCurrentRecord;
00473 } EMFINFO, *PEMFINFO;
00474 
00475 typedef struct _ENGSAFESEMAPHORE {
00476   HSEMAPHORE  hsem;
00477   LONG  lCount;
00478 } ENGSAFESEMAPHORE;
00479 
00480 typedef struct _ENG_TIME_FIELDS {
00481   _Field_range_(1601,MAXUSHORT) USHORT  usYear;
00482   _Field_range_(1,12) USHORT  usMonth;
00483   _Field_range_(1,31) USHORT  usDay;
00484   _Field_range_(0,23) USHORT  usHour;
00485   _Field_range_(0,59) USHORT  usMinute;
00486   _Field_range_(0,59) USHORT  usSecond;
00487   _Field_range_(0,999) USHORT  usMilliseconds;
00488   _Field_range_(0,6) USHORT  usWeekday; // 0 == Sunday
00489 } ENG_TIME_FIELDS, *PENG_TIME_FIELDS;
00490 
00491 typedef struct _ENUMRECTS {
00492   ULONG  c;
00493   RECTL  arcl[1];
00494 } ENUMRECTS;
00495 
00496 typedef struct _FD_XFORM {
00497   FLOATL  eXX;
00498   FLOATL  eXY;
00499   FLOATL  eYX;
00500   FLOATL  eYY;
00501 } FD_XFORM, *PFD_XFORM;
00502 
00503 /* FD_DEVICEMETRICS.flRealizedType constants */
00504 #define FDM_TYPE_BM_SIDE_CONST            0x00000001
00505 #define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE     0x00000002
00506 #define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE   0x00000004
00507 #define FDM_TYPE_ZERO_BEARINGS            0x00000008
00508 #define FDM_TYPE_CONST_BEARINGS           0x00000010
00509 
00510 typedef struct _FD_DEVICEMETRICS {
00511   FLONG  flRealizedType;
00512   POINTE  pteBase;
00513   POINTE  pteSide;
00514   LONG  lD;
00515   FIX  fxMaxAscender;
00516   FIX  fxMaxDescender;
00517   POINTL  ptlUnderline1;
00518   POINTL  ptlStrikeout;
00519   POINTL  ptlULThickness;
00520   POINTL  ptlSOThickness;
00521   ULONG  cxMax;
00522   ULONG  cyMax;
00523   ULONG  cjGlyphMax;
00524   FD_XFORM  fdxQuantized;
00525   LONG  lNonLinearExtLeading;
00526   LONG  lNonLinearIntLeading;
00527   LONG  lNonLinearMaxCharWidth;
00528   LONG  lNonLinearAvgCharWidth;
00529   LONG  lMinA;
00530   LONG  lMinC;
00531   LONG  lMinD;
00532   LONG  alReserved[1];
00533 } FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;
00534 
00535 /* FD_GLYPHATTR.iMode constants */
00536 #define FO_ATTR_MODE_ROTATE               1
00537 
00538 typedef struct _FD_GLYPHATTR {
00539   ULONG  cjThis;
00540   ULONG  cGlyphs;
00541   ULONG  iMode;
00542   _Field_size_((cGlyphs+7)/8) BYTE  aGlyphAttr[1];
00543 } FD_GLYPHATTR, *PFD_GLYPHATTR;
00544 
00545 /* FD_GLYPHSET.flAccel */
00546 #define GS_UNICODE_HANDLES                0x00000001
00547 #define GS_8BIT_HANDLES                   0x00000002
00548 #define GS_16BIT_HANDLES                  0x00000004
00549 
00550 typedef struct _WCRUN {
00551   WCHAR  wcLow;
00552   USHORT  cGlyphs;
00553   HGLYPH  *phg;
00554 } WCRUN, *PWCRUN;
00555 
00556 typedef struct _FD_GLYPHSET {
00557   ULONG  cjThis;
00558   FLONG  flAccel;
00559   ULONG  cGlyphsSupported;
00560   ULONG  cRuns;
00561   _Field_size_(cRuns) WCRUN  awcrun[1];
00562 } FD_GLYPHSET, *PFD_GLYPHSET;
00563 
00564 typedef struct _FD_KERNINGPAIR {
00565   WCHAR  wcFirst;
00566   WCHAR  wcSecond;
00567   FWORD  fwdKern;
00568 } FD_KERNINGPAIR;
00569 
00570 #if defined(_X86_) && !defined(USERMODE_DRIVER)
00571 typedef struct _FLOATOBJ
00572 {
00573   ULONG  ul1;
00574   ULONG  ul2;
00575 } FLOATOBJ, *PFLOATOBJ;
00576 #else
00577 typedef FLOAT FLOATOBJ, *PFLOATOBJ;
00578 #endif
00579 
00580 #ifndef USERMODE_DRIVER
00581 typedef struct tagFLOATOBJ_XFORM {
00582   FLOATOBJ  eM11;
00583   FLOATOBJ  eM12;
00584   FLOATOBJ  eM21;
00585   FLOATOBJ  eM22;
00586   FLOATOBJ  eDx;
00587   FLOATOBJ  eDy;
00588 } FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
00589 #else
00590 typedef XFORML FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
00591 #endif
00592 
00593 /* FONTDIFF.fsSelection */
00594 #define FM_SEL_ITALIC                     0x0001
00595 #define FM_SEL_UNDERSCORE                 0x0002
00596 #define FM_SEL_NEGATIVE                   0x0004
00597 #define FM_SEL_OUTLINED                   0x0008
00598 #define FM_SEL_STRIKEOUT                  0x0010
00599 #define FM_SEL_BOLD                       0x0020
00600 #define FM_SEL_REGULAR                    0x0040
00601 
00602 typedef struct _FONTDIFF {
00603   BYTE  jReserved1;
00604   BYTE  jReserved2;
00605   BYTE  jReserved3;
00606   BYTE  bWeight;
00607   USHORT  usWinWeight;
00608   FSHORT  fsSelection;
00609   FWORD  fwdAveCharWidth;
00610   FWORD  fwdMaxCharInc;
00611   POINTL  ptlCaret;
00612 } FONTDIFF;
00613 
00614 typedef struct _FONTSIM {
00615   PTRDIFF  dpBold;
00616   PTRDIFF  dpItalic;
00617   PTRDIFF  dpBoldItalic;
00618 } FONTSIM;
00619 
00620 /* FONTINFO.flCaps constants */
00621 #define FO_DEVICE_FONT                    1L
00622 #define FO_OUTLINE_CAPABLE                2L
00623 
00624 typedef struct _FONTINFO {
00625   ULONG  cjThis;
00626   FLONG  flCaps;
00627   ULONG  cGlyphsSupported;
00628   ULONG  cjMaxGlyph1;
00629   ULONG  cjMaxGlyph4;
00630   ULONG  cjMaxGlyph8;
00631   ULONG  cjMaxGlyph32;
00632 } FONTINFO, *PFONTINFO;
00633 
00634 /* FONTOBJ.flFontType constants */
00635 #define FO_TYPE_RASTER   RASTER_FONTTYPE
00636 #define FO_TYPE_DEVICE   DEVICE_FONTTYPE
00637 #define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE
00638 #define FO_TYPE_OPENTYPE OPENTYPE_FONTTYPE
00639 
00640 #define FO_SIM_BOLD      0x00002000
00641 #define FO_SIM_ITALIC    0x00004000
00642 #define FO_EM_HEIGHT     0x00008000
00643 #define FO_GRAY16        0x00010000
00644 #define FO_NOGRAY16      0x00020000
00645 #define FO_NOHINTS       0x00040000
00646 #define FO_NO_CHOICE     0x00080000
00647 #define FO_CFF            0x00100000
00648 #define FO_POSTSCRIPT     0x00200000
00649 #define FO_MULTIPLEMASTER 0x00400000
00650 #define FO_VERT_FACE      0x00800000
00651 #define FO_DBCS_FONT      0X01000000
00652 #define FO_NOCLEARTYPE    0x02000000
00653 #define FO_CLEARTYPE_X    0x10000000
00654 #define FO_CLEARTYPE_Y    0x20000000
00655 
00656 typedef struct _FONTOBJ {
00657   ULONG  iUniq;
00658   ULONG  iFace;
00659   ULONG  cxMax;
00660   FLONG  flFontType;
00661   ULONG_PTR  iTTUniq;
00662   ULONG_PTR  iFile;
00663   SIZE  sizLogResPpi;
00664   ULONG  ulStyleSize;
00665   PVOID  pvConsumer;
00666   PVOID  pvProducer;
00667 } FONTOBJ;
00668 
00669 typedef struct _GAMMARAMP {
00670   WORD  Red[256];
00671   WORD  Green[256];
00672   WORD  Blue[256];
00673 } GAMMARAMP, *PGAMMARAMP;
00674 
00675 /* GDIINFO.ulPrimaryOrder constants */
00676 #define PRIMARY_ORDER_ABC                 0
00677 #define PRIMARY_ORDER_ACB                 1
00678 #define PRIMARY_ORDER_BAC                 2
00679 #define PRIMARY_ORDER_BCA                 3
00680 #define PRIMARY_ORDER_CBA                 4
00681 #define PRIMARY_ORDER_CAB                 5
00682 
00683 /* GDIINFO.ulHTPatternSize constants */
00684 #define HT_PATSIZE_2x2                    0
00685 #define HT_PATSIZE_2x2_M                  1
00686 #define HT_PATSIZE_4x4                    2
00687 #define HT_PATSIZE_4x4_M                  3
00688 #define HT_PATSIZE_6x6                    4
00689 #define HT_PATSIZE_6x6_M                  5
00690 #define HT_PATSIZE_8x8                    6
00691 #define HT_PATSIZE_8x8_M                  7
00692 #define HT_PATSIZE_10x10                  8
00693 #define HT_PATSIZE_10x10_M                9
00694 #define HT_PATSIZE_12x12                  10
00695 #define HT_PATSIZE_12x12_M                11
00696 #define HT_PATSIZE_14x14                  12
00697 #define HT_PATSIZE_14x14_M                13
00698 #define HT_PATSIZE_16x16                  14
00699 #define HT_PATSIZE_16x16_M                15
00700 #define HT_PATSIZE_SUPERCELL              16
00701 #define HT_PATSIZE_SUPERCELL_M            17
00702 #define HT_PATSIZE_USER                   18
00703 #define HT_PATSIZE_MAX_INDEX              HT_PATSIZE_USER
00704 #define HT_PATSIZE_DEFAULT                HT_PATSIZE_SUPERCELL_M
00705 #define HT_USERPAT_CX_MIN                 4
00706 #define HT_USERPAT_CX_MAX                 256
00707 #define HT_USERPAT_CY_MIN                 4
00708 #define HT_USERPAT_CY_MAX                 256
00709 
00710 /* GDIINFO.ulHTOutputFormat constants */
00711 #define HT_FORMAT_1BPP                    0
00712 #define HT_FORMAT_4BPP                    2
00713 #define HT_FORMAT_4BPP_IRGB               3
00714 #define HT_FORMAT_8BPP                    4
00715 #define HT_FORMAT_16BPP                   5
00716 #define HT_FORMAT_24BPP                   6
00717 #define HT_FORMAT_32BPP                   7
00718 
00719 /* GDIINFO.flHTFlags */
00720 #define HT_FLAG_SQUARE_DEVICE_PEL         0x00000001
00721 #define HT_FLAG_HAS_BLACK_DYE             0x00000002
00722 #define HT_FLAG_ADDITIVE_PRIMS            0x00000004
00723 #define HT_FLAG_USE_8BPP_BITMASK          0x00000008
00724 #define HT_FLAG_INK_HIGH_ABSORPTION       0x00000010
00725 #define HT_FLAG_INK_ABSORPTION_INDICES    0x00000060
00726 #define HT_FLAG_DO_DEVCLR_XFORM           0x00000080
00727 #define HT_FLAG_OUTPUT_CMY                0x00000100
00728 #define HT_FLAG_PRINT_DRAFT_MODE          0x00000200
00729 #define HT_FLAG_INVERT_8BPP_BITMASK_IDX   0x00000400
00730 #define HT_FLAG_8BPP_CMY332_MASK          0xFF000000
00731 
00732 #define MAKE_CMYMASK_BYTE(c,m,y)          ((BYTE)(((BYTE)(c) & 0x07) << 5) \
00733                                           |(BYTE)(((BYTE)(m) & 0x07) << 2) \
00734                                           |(BYTE)((BYTE)(y) & 0x03))
00735 
00736 #define MAKE_CMY332_MASK(c,m,y)           ((DWORD)(((DWORD)(c) & 0x07) << 29)\
00737                                           |(DWORD)(((DWORD)(m) & 0x07) << 26)\
00738                                           |(DWORD)(((DWORD)(y) & 0x03) << 24))
00739 
00740 /* GDIINFO.flHTFlags constants */
00741 #define HT_FLAG_INK_ABSORPTION_IDX0       0x00000000
00742 #define HT_FLAG_INK_ABSORPTION_IDX1       0x00000020
00743 #define HT_FLAG_INK_ABSORPTION_IDX2       0x00000040
00744 #define HT_FLAG_INK_ABSORPTION_IDX3       0x00000060
00745 
00746 #define HT_FLAG_HIGHEST_INK_ABSORPTION    (HT_FLAG_INK_HIGH_ABSORPTION \
00747                                           |HT_FLAG_INK_ABSORPTION_IDX3)
00748 #define HT_FLAG_HIGHER_INK_ABSORPTION     (HT_FLAG_INK_HIGH_ABSORPTION \
00749                                           |HT_FLAG_INK_ABSORPTION_IDX2)
00750 #define HT_FLAG_HIGH_INK_ABSORPTION       (HT_FLAG_INK_HIGH_ABSORPTION \
00751                                           |HT_FLAG_INK_ABSORPTION_IDX1)
00752 #define HT_FLAG_NORMAL_INK_ABSORPTION     HT_FLAG_INK_ABSORPTION_IDX0
00753 #define HT_FLAG_LOW_INK_ABSORPTION        HT_FLAG_INK_ABSORPTION_IDX1
00754 #define HT_FLAG_LOWER_INK_ABSORPTION      HT_FLAG_INK_ABSORPTION_IDX2
00755 #define HT_FLAG_LOWEST_INK_ABSORPTION     HT_FLAG_INK_ABSORPTION_IDX3
00756 
00757 #define HT_BITMASKPALRGB                  (DWORD)'0BGR'
00758 #define HT_SET_BITMASKPAL2RGB(pPal)       (*((LPDWORD)(pPal)) = HT_BITMASKPALRGB)
00759 #define HT_IS_BITMASKPALRGB(pPal)         (*((LPDWORD)(pPal)) == (DWORD)0)
00760 
00761 /* GDIINFO.ulPhysicalPixelCharacteristics constants */
00762 #define PPC_DEFAULT                       0x0
00763 #define PPC_UNDEFINED                     0x1
00764 #define PPC_RGB_ORDER_VERTICAL_STRIPES    0x2
00765 #define PPC_BGR_ORDER_VERTICAL_STRIPES    0x3
00766 #define PPC_RGB_ORDER_HORIZONTAL_STRIPES  0x4
00767 #define PPC_BGR_ORDER_HORIZONTAL_STRIPES  0x5
00768 
00769 #define PPG_DEFAULT                       0
00770 #define PPG_SRGB                          1
00771 
00772 typedef struct _GDIINFO {
00773   ULONG  ulVersion;
00774   ULONG  ulTechnology;
00775   ULONG  ulHorzSize;
00776   ULONG  ulVertSize;
00777   ULONG  ulHorzRes;
00778   ULONG  ulVertRes;
00779   ULONG  cBitsPixel;
00780   ULONG  cPlanes;
00781   ULONG  ulNumColors;
00782   ULONG  flRaster;
00783   ULONG  ulLogPixelsX;
00784   ULONG  ulLogPixelsY;
00785   ULONG  flTextCaps;
00786   ULONG  ulDACRed;
00787   ULONG  ulDACGreen;
00788   ULONG  ulDACBlue;
00789   ULONG  ulAspectX;
00790   ULONG  ulAspectY;
00791   ULONG  ulAspectXY;
00792   LONG  xStyleStep;
00793   LONG  yStyleStep;
00794   LONG  denStyleStep;
00795   POINTL  ptlPhysOffset;
00796   SIZEL  szlPhysSize;
00797   ULONG  ulNumPalReg;
00798   COLORINFO  ciDevice;
00799   ULONG  ulDevicePelsDPI;
00800   ULONG  ulPrimaryOrder;
00801   ULONG  ulHTPatternSize;
00802   ULONG  ulHTOutputFormat;
00803   ULONG  flHTFlags;
00804   ULONG  ulVRefresh;
00805   ULONG  ulBltAlignment;
00806   ULONG  ulPanningHorzRes;
00807   ULONG  ulPanningVertRes;
00808   ULONG  xPanningAlignment;
00809   ULONG  yPanningAlignment;
00810   ULONG  cxHTPat;
00811   ULONG  cyHTPat;
00812   LPBYTE  pHTPatA;
00813   LPBYTE  pHTPatB;
00814   LPBYTE  pHTPatC;
00815   ULONG  flShadeBlend;
00816   ULONG  ulPhysicalPixelCharacteristics;
00817   ULONG  ulPhysicalPixelGamma;
00818 } GDIINFO, *PGDIINFO;
00819 
00820 /* PATHDATA.flags constants */
00821 #define PD_BEGINSUBPATH                   0x00000001
00822 #define PD_ENDSUBPATH                     0x00000002
00823 #define PD_RESETSTYLE                     0x00000004
00824 #define PD_CLOSEFIGURE                    0x00000008
00825 #define PD_BEZIERS                        0x00000010
00826 #define PD_ALL                            (PD_BEGINSUBPATH \
00827                                           |PD_ENDSUBPATH \
00828                                           |PD_RESETSTYLE \
00829                                           |PD_CLOSEFIGURE \
00830                                           PD_BEZIERS)
00831 
00832 typedef struct _PATHDATA {
00833   FLONG  flags;
00834   ULONG  count;
00835   POINTFIX  *pptfx;
00836 } PATHDATA, *PPATHDATA;
00837 
00838 /* PATHOBJ.fl constants */
00839 #define PO_BEZIERS                        0x00000001
00840 #define PO_ELLIPSE                        0x00000002
00841 #define PO_ALL_INTEGERS                   0x00000004
00842 #define PO_ENUM_AS_INTEGERS               0x00000008
00843 
00844 typedef struct _PATHOBJ {
00845   FLONG  fl;
00846   ULONG  cCurves;
00847 } PATHOBJ;
00848 
00849 typedef BYTE GAMMA_TABLES[2][256];
00850 
00851 typedef struct _GLYPHBITS {
00852   POINTL  ptlOrigin;
00853   SIZEL  sizlBitmap;
00854   BYTE  aj[1];
00855 } GLYPHBITS;
00856 
00857 typedef union _GLYPHDEF {
00858   GLYPHBITS  *pgb;
00859   PATHOBJ  *ppo;
00860 } GLYPHDEF;
00861 
00862 typedef struct _GLYPHPOS {
00863   HGLYPH  hg;
00864   GLYPHDEF  *pgdf;
00865   POINTL  ptl;
00866 } GLYPHPOS, *PGLYPHPOS;
00867 
00868 typedef struct _GLYPHDATA {
00869   GLYPHDEF  gdf;
00870   HGLYPH  hg;
00871   FIX  fxD;
00872   FIX  fxA;
00873   FIX  fxAB;
00874   FIX  fxInkTop;
00875   FIX  fxInkBottom;
00876   RECTL  rclInk;
00877   POINTQF  ptqD;
00878 } GLYPHDATA;
00879 
00880 typedef struct _IFIEXTRA {
00881   ULONG  ulIdentifier;
00882   PTRDIFF  dpFontSig;
00883   ULONG  cig;
00884   PTRDIFF  dpDesignVector;
00885   PTRDIFF  dpAxesInfoW;
00886   ULONG  aulReserved[1];
00887 } IFIEXTRA, *PIFIEXTRA;
00888 
00889 /* IFIMETRICS constants */
00890 
00891 #define FM_VERSION_NUMBER                 0x0
00892 
00893 /* IFIMETRICS.fsType constants */
00894 #define FM_TYPE_LICENSED                  0x2
00895 #define FM_READONLY_EMBED                 0x4
00896 #define FM_EDITABLE_EMBED                 0x8
00897 #define FM_NO_EMBEDDING                   FM_TYPE_LICENSED
00898 
00899 /* IFIMETRICS.flInfo constants */
00900 #define FM_INFO_TECH_TRUETYPE             0x00000001
00901 #define FM_INFO_TECH_BITMAP               0x00000002
00902 #define FM_INFO_TECH_STROKE               0x00000004
00903 #define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
00904 #define FM_INFO_ARB_XFORMS                0x00000010
00905 #define FM_INFO_1BPP                      0x00000020
00906 #define FM_INFO_4BPP                      0x00000040
00907 #define FM_INFO_8BPP                      0x00000080
00908 #define FM_INFO_16BPP                     0x00000100
00909 #define FM_INFO_24BPP                     0x00000200
00910 #define FM_INFO_32BPP                     0x00000400
00911 #define FM_INFO_INTEGER_WIDTH             0x00000800
00912 #define FM_INFO_CONSTANT_WIDTH            0x00001000
00913 #define FM_INFO_NOT_CONTIGUOUS            0x00002000
00914 #define FM_INFO_TECH_MM                   0x00004000
00915 #define FM_INFO_RETURNS_OUTLINES          0x00008000
00916 #define FM_INFO_RETURNS_STROKES           0x00010000
00917 #define FM_INFO_RETURNS_BITMAPS           0x00020000
00918 #define FM_INFO_DSIG                      0x00040000
00919 #define FM_INFO_RIGHT_HANDED              0x00080000
00920 #define FM_INFO_INTEGRAL_SCALING          0x00100000
00921 #define FM_INFO_90DEGREE_ROTATIONS        0x00200000
00922 #define FM_INFO_OPTICALLY_FIXED_PITCH     0x00400000
00923 #define FM_INFO_DO_NOT_ENUMERATE          0x00800000
00924 #define FM_INFO_ISOTROPIC_SCALING_ONLY    0x01000000
00925 #define FM_INFO_ANISOTROPIC_SCALING_ONLY  0x02000000
00926 #define FM_INFO_TECH_CFF                  0x04000000
00927 #define FM_INFO_FAMILY_EQUIV              0x08000000
00928 #define FM_INFO_DBCS_FIXED_PITCH          0x10000000
00929 #define FM_INFO_NONNEGATIVE_AC            0x20000000
00930 #define FM_INFO_IGNORE_TC_RA_ABLE         0x40000000
00931 #define FM_INFO_TECH_TYPE1                0x80000000
00932 
00933 #define MAXCHARSETS                       16
00934 
00935 /* IFIMETRICS.ulPanoseCulture constants */
00936 #define  FM_PANOSE_CULTURE_LATIN          0x0
00937 
00938 typedef struct _IFIMETRICS {
00939   ULONG  cjThis;
00940   ULONG  cjIfiExtra;
00941   PTRDIFF  dpwszFamilyName;
00942   PTRDIFF  dpwszStyleName;
00943   PTRDIFF  dpwszFaceName;
00944   PTRDIFF  dpwszUniqueName;
00945   PTRDIFF  dpFontSim;
00946   LONG  lEmbedId;
00947   LONG  lItalicAngle;
00948   LONG  lCharBias;
00949   PTRDIFF  dpCharSets;
00950   BYTE  jWinCharSet;
00951   BYTE  jWinPitchAndFamily;
00952   USHORT  usWinWeight;
00953   ULONG  flInfo;
00954   USHORT  fsSelection;
00955   USHORT  fsType;
00956   FWORD  fwdUnitsPerEm;
00957   FWORD  fwdLowestPPEm;
00958   FWORD  fwdWinAscender;
00959   FWORD  fwdWinDescender;
00960   FWORD  fwdMacAscender;
00961   FWORD  fwdMacDescender;
00962   FWORD  fwdMacLineGap;
00963   FWORD  fwdTypoAscender;
00964   FWORD  fwdTypoDescender;
00965   FWORD  fwdTypoLineGap;
00966   FWORD  fwdAveCharWidth;
00967   FWORD  fwdMaxCharInc;
00968   FWORD  fwdCapHeight;
00969   FWORD  fwdXHeight;
00970   FWORD  fwdSubscriptXSize;
00971   FWORD  fwdSubscriptYSize;
00972   FWORD  fwdSubscriptXOffset;
00973   FWORD  fwdSubscriptYOffset;
00974   FWORD  fwdSuperscriptXSize;
00975   FWORD  fwdSuperscriptYSize;
00976   FWORD  fwdSuperscriptXOffset;
00977   FWORD  fwdSuperscriptYOffset;
00978   FWORD  fwdUnderscoreSize;
00979   FWORD  fwdUnderscorePosition;
00980   FWORD  fwdStrikeoutSize;
00981   FWORD  fwdStrikeoutPosition;
00982   BYTE  chFirstChar;
00983   BYTE  chLastChar;
00984   BYTE  chDefaultChar;
00985   BYTE  chBreakChar;
00986   WCHAR  wcFirstChar;
00987   WCHAR  wcLastChar;
00988   WCHAR  wcDefaultChar;
00989   WCHAR  wcBreakChar;
00990   POINTL  ptlBaseline;
00991   POINTL  ptlAspect;
00992   POINTL  ptlCaret;
00993   RECTL  rclFontBox;
00994   BYTE  achVendId[4];
00995   ULONG  cKerningPairs;
00996   ULONG  ulPanoseCulture;
00997   PANOSE  panose;
00998 #if defined(_WIN64)
00999   PVOID  Align;
01000 #endif
01001 } IFIMETRICS, *PIFIMETRICS;
01002 
01003 /* LINEATTRS.fl */
01004 #define LA_GEOMETRIC                      0x00000001
01005 #define LA_ALTERNATE                      0x00000002
01006 #define LA_STARTGAP                       0x00000004
01007 #define LA_STYLED                         0x00000008
01008 
01009 /* LINEATTRS.iJoin */
01010 #define JOIN_ROUND                        0L
01011 #define JOIN_BEVEL                        1L
01012 #define JOIN_MITER                        2L
01013 
01014 /* LINEATTRS.iEndCap */
01015 #define ENDCAP_ROUND                      0L
01016 #define ENDCAP_SQUARE                     1L
01017 #define ENDCAP_BUTT                       2L
01018 
01019 typedef struct _LINEATTRS {
01020   FLONG  fl;
01021   ULONG  iJoin;
01022   ULONG  iEndCap;
01023   FLOAT_LONG  elWidth;
01024   FLOATL  eMiterLimit;
01025   ULONG  cstyle;
01026   PFLOAT_LONG  pstyle;
01027   FLOAT_LONG  elStyleState;
01028 } LINEATTRS, *PLINEATTRS;
01029 
01030 typedef struct _PALOBJ {
01031   ULONG  ulReserved;
01032 } PALOBJ;
01033 
01034 typedef struct _PERBANDINFO {
01035   BOOL  bRepeatThisBand;
01036   SIZEL  szlBand;
01037   ULONG  ulHorzRes;
01038   ULONG  ulVertRes;
01039 } PERBANDINFO, *PPERBANDINFO;
01040 
01041 /* STROBJ.flAccel constants */
01042 #define SO_FLAG_DEFAULT_PLACEMENT        0x00000001
01043 #define SO_HORIZONTAL                    0x00000002
01044 #define SO_VERTICAL                      0x00000004
01045 #define SO_REVERSED                      0x00000008
01046 #define SO_ZERO_BEARINGS                 0x00000010
01047 #define SO_CHAR_INC_EQUAL_BM_BASE        0x00000020
01048 #define SO_MAXEXT_EQUAL_BM_SIDE          0x00000040
01049 #define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
01050 #define SO_GLYPHINDEX_TEXTOUT            0x00000100
01051 #define SO_ESC_NOT_ORIENT                0x00000200
01052 #define SO_DXDY                          0x00000400
01053 #define SO_CHARACTER_EXTRA               0x00000800
01054 #define SO_BREAK_EXTRA                   0x00001000
01055 
01056 typedef struct _STROBJ {
01057   ULONG  cGlyphs;
01058   FLONG  flAccel;
01059   ULONG  ulCharInc;
01060   RECTL  rclBkGround;
01061   GLYPHPOS  *pgp;
01062   LPWSTR  pwszOrg;
01063 } STROBJ;
01064 
01065 
01066 /* SURFOBJ.iType constants */
01067 #define STYPE_BITMAP                      0L
01068 #define STYPE_DEVICE                      1L
01069 #define STYPE_DEVBITMAP                   3L
01070 
01071 /* SURFOBJ.fjBitmap constants */
01072 #define BMF_TOPDOWN                       0x0001
01073 #define BMF_NOZEROINIT                    0x0002
01074 #define BMF_DONTCACHE                     0x0004
01075 #define BMF_USERMEM                       0x0008
01076 #define BMF_KMSECTION                     0x0010
01077 #define BMF_NOTSYSMEM                     0x0020
01078 #define BMF_WINDOW_BLT                    0x0040
01079 #define BMF_UMPDMEM                       0x0080
01080 #define BMF_RESERVED                      0xFF00
01081 
01082 typedef struct _SURFOBJ {
01083   DHSURF  dhsurf;
01084   HSURF  hsurf;
01085   DHPDEV  dhpdev;
01086   HDEV  hdev;
01087   SIZEL  sizlBitmap;
01088   ULONG  cjBits;
01089   PVOID  pvBits;
01090   PVOID  pvScan0;
01091   LONG  lDelta;
01092   ULONG  iUniq;
01093   ULONG  iBitmapFormat;
01094   USHORT  iType;
01095   USHORT  fjBitmap;
01096 } SURFOBJ;
01097 
01098 typedef struct _TYPE1_FONT {
01099   HANDLE  hPFM;
01100   HANDLE  hPFB;
01101   ULONG  ulIdentifier;
01102 } TYPE1_FONT;
01103 
01104 typedef struct _WNDOBJ {
01105   CLIPOBJ  coClient;
01106   PVOID  pvConsumer;
01107   RECTL  rclClient;
01108   SURFOBJ  *psoOwner;
01109 } WNDOBJ, *PWNDOBJ;
01110 
01111 typedef struct _XFORML {
01112   FLOATL  eM11;
01113   FLOATL  eM12;
01114   FLOATL  eM21;
01115   FLOATL  eM22;
01116   FLOATL  eDx;
01117   FLOATL  eDy;
01118 } XFORML, *PXFORML;
01119 
01120 typedef struct _XFORMOBJ {
01121   ULONG  ulReserved;
01122 } XFORMOBJ;
01123 
01124 /* XLATEOBJ.flXlate constants */
01125 #define XO_TRIVIAL                        0x00000001
01126 #define XO_TABLE                          0x00000002
01127 #define XO_TO_MONO                        0x00000004
01128 #define XO_FROM_CMYK                      0x00000008
01129 #define XO_DEVICE_ICM                     0x00000010
01130 #define XO_HOST_ICM                       0x00000020
01131 
01132 typedef struct _XLATEOBJ {
01133   ULONG  iUniq;
01134   FLONG  flXlate;
01135   USHORT  iSrcType;
01136   USHORT  iDstType;
01137   ULONG  cEntries;
01138   ULONG  *pulXlate;
01139 } XLATEOBJ;
01140 
01141 /* WNDOBJCHANGEPROC.fl constants */
01142 #define WOC_RGN_CLIENT_DELTA              0x00000001
01143 #define WOC_RGN_CLIENT                    0x00000002
01144 #define WOC_RGN_SURFACE_DELTA             0x00000004
01145 #define WOC_RGN_SURFACE                   0x00000008
01146 #define WOC_CHANGED                       0x00000010
01147 #define WOC_DELETE                        0x00000020
01148 #define WOC_DRAWN                         0x00000040
01149 #define WOC_SPRITE_OVERLAP                0x00000080
01150 #define WOC_SPRITE_NO_OVERLAP             0x00000100
01151 #if (NTDDI_VERSION >= NTDDI_VISTA)
01152 #define WOC_RGN_SPRITE                    0x00000200
01153 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
01154 
01155 typedef VOID (APIENTRY CALLBACK *WNDOBJCHANGEPROC)(
01156     _In_ WNDOBJ *pwo,
01157     _In_ FLONG fl);
01158 
01159 
01160 WIN32KAPI
01161 HANDLE
01162 APIENTRY
01163 BRUSHOBJ_hGetColorTransform(
01164     _In_ BRUSHOBJ *pbo);
01165 
01166 _Ret_opt_bytecount_(cj)
01167 WIN32KAPI
01168 PVOID
01169 APIENTRY
01170 BRUSHOBJ_pvAllocRbrush(
01171     _In_ BRUSHOBJ *pbo,
01172     _In_ ULONG cj);
01173 
01174 WIN32KAPI
01175 PVOID
01176 APIENTRY
01177 BRUSHOBJ_pvGetRbrush(
01178     _In_ BRUSHOBJ *pbo);
01179 
01180 WIN32KAPI
01181 ULONG
01182 APIENTRY
01183 BRUSHOBJ_ulGetBrushColor(
01184     _In_ BRUSHOBJ *pbo);
01185 
01186 WIN32KAPI
01187 BOOL
01188 APIENTRY
01189 CLIPOBJ_bEnum(
01190     _In_ CLIPOBJ *pco,
01191     _In_ ULONG cj,
01192     _Out_bytecap_(cj) ULONG *pul);
01193 
01194 /* CLIPOBJ_cEnumStart.iType constants */
01195 #define CT_RECTANGLES                     0L
01196 
01197 /* CLIPOBJ_cEnumStart.iDirection constants */
01198 #define CD_RIGHTDOWN                      0x00000000
01199 #define CD_LEFTDOWN                       0x00000001
01200 #define CD_LEFTWARDS                      0x00000001
01201 #define CD_RIGHTUP                        0x00000002
01202 #define CD_UPWARDS                        0x00000002
01203 #define CD_LEFTUP                         0x00000003
01204 #define CD_ANY                            0x00000004
01205 
01206 WIN32KAPI
01207 ULONG
01208 APIENTRY
01209 CLIPOBJ_cEnumStart(
01210     _Inout_ CLIPOBJ *pco,
01211     _In_ BOOL bAll,
01212     _In_ ULONG iType,
01213     _In_ ULONG iDirection,
01214     _In_ ULONG cLimit);
01215 
01216 WIN32KAPI
01217 PATHOBJ*
01218 APIENTRY
01219 CLIPOBJ_ppoGetPath(
01220     _In_ CLIPOBJ *pco);
01221 
01222 #if (NTDDI_VERSION >= NTDDI_VISTA)
01223 WIN32KAPI
01224 HANDLE
01225 APIENTRY
01226 CLIPOBJ_GetRgn(
01227     _In_ CLIPOBJ* pco);
01228 #endif
01229 
01230 WIN32KAPI
01231 VOID
01232 APIENTRY
01233 EngAcquireSemaphore(
01234     _Inout_ HSEMAPHORE hsem);
01235 
01236 #define FL_ZERO_MEMORY                    0x00000001
01237 #define FL_NONPAGED_MEMORY                0x00000002
01238 
01239 #ifdef USERMODE_DRIVER
01240 
01241 #define EngAllocMem(fl, cj, tag) ((PVOID)GlobalAlloc(((fl) & FL_ZERO_MEMORY) ? GPTR : GMEM_FIXED, cj))
01242 #define EngAllocPrivateUserMem(psl, cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
01243 #define EngAllocUserMem(cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
01244 
01245 #else
01246 
01247 _Must_inspect_result_
01248 _When_(fl & FL_ZERO_MEMORY, _Ret_opt_bytecount_(cjMemSize))
01249 _When_(!(fl & FL_ZERO_MEMORY), _Ret_opt_bytecap_(cjMemSize))
01250 WIN32KAPI
01251 PVOID
01252 APIENTRY
01253 EngAllocMem(
01254     _In_ ULONG fl,
01255     _In_ ULONG cjMemSize,
01256     _In_ ULONG ulTag);
01257 
01258 _Must_inspect_result_
01259 _Ret_opt_bytecount_(cj)
01260 WIN32KAPI
01261 PVOID
01262 APIENTRY
01263 EngAllocPrivateUserMem(
01264     _In_ PDD_SURFACE_LOCAL psl,
01265     _In_ SIZE_T cjMemSize,
01266     _In_ ULONG ulTag);
01267 
01268 _Must_inspect_result_
01269 _Ret_opt_bytecount_(cjMemSize)
01270 WIN32KAPI
01271 PVOID
01272 APIENTRY
01273 EngAllocUserMem(
01274     _In_ SIZE_T cjMemSize,
01275     _In_ ULONG ulTag);
01276 
01277 #endif /* USERMODE_DRIVER */
01278 
01279 WIN32KAPI
01280 BOOL
01281 APIENTRY
01282 EngAlphaBlend(
01283     _Inout_ SURFOBJ *psoDest,
01284     _In_ SURFOBJ *psoSrc,
01285     _In_opt_ CLIPOBJ *pco,
01286     _In_opt_ XLATEOBJ *pxlo,
01287     _In_ RECTL *prclDest,
01288     _In_ RECTL *prclSrc,
01289     _In_ BLENDOBJ *pBlendObj);
01290 
01291 /* EngAssociateSurface.flHooks constants */
01292 #define HOOK_BITBLT                       0x00000001
01293 #define HOOK_STRETCHBLT                   0x00000002
01294 #define HOOK_PLGBLT                       0x00000004
01295 #define HOOK_TEXTOUT                      0x00000008
01296 #define HOOK_PAINT                        0x00000010
01297 #define HOOK_STROKEPATH                   0x00000020
01298 #define HOOK_FILLPATH                     0x00000040
01299 #define HOOK_STROKEANDFILLPATH            0x00000080
01300 #define HOOK_LINETO                       0x00000100
01301 #define HOOK_COPYBITS                     0x00000400
01302 #define HOOK_MOVEPANNING                  0x00000800
01303 #define HOOK_SYNCHRONIZE                  0x00001000
01304 #define HOOK_STRETCHBLTROP                0x00002000
01305 #define HOOK_SYNCHRONIZEACCESS            0x00004000
01306 #define HOOK_TRANSPARENTBLT               0x00008000
01307 #define HOOK_ALPHABLEND                   0x00010000
01308 #define HOOK_GRADIENTFILL                 0x00020000
01309 #if (NTDDI_VERSION >= NTDDI_VISTA)
01310 #define HOOK_FLAGS                        0x0003b5ef
01311 #else
01312 #define HOOK_FLAGS                        0x0003b5ff
01313 #endif
01314 
01315 WIN32KAPI
01316 BOOL
01317 APIENTRY
01318 EngAssociateSurface(
01319     _In_ HSURF hsurf,
01320     _In_ HDEV hdev,
01321     _In_ FLONG flHooks);
01322 
01323 WIN32KAPI
01324 BOOL
01325 APIENTRY
01326 EngBitBlt(
01327     _Inout_ SURFOBJ *psoTrg,
01328     _In_opt_ SURFOBJ *psoSrc,
01329     _In_opt_ SURFOBJ *psoMask,
01330     _In_opt_ CLIPOBJ *pco,
01331     _In_opt_ XLATEOBJ *pxlo,
01332     _In_ RECTL *prclTrg,
01333     _When_(psoSrc, _In_) POINTL *pptlSrc,
01334     _When_(psoMask, _In_) POINTL *pptlMask,
01335     _In_opt_ BRUSHOBJ *pbo,
01336     _When_(pbo, _In_) POINTL *pptlBrush,
01337     _In_ ROP4 rop4);
01338 
01339 WIN32KAPI
01340 BOOL
01341 APIENTRY
01342 EngCheckAbort(
01343     _In_ SURFOBJ *pso);
01344 
01345 WIN32KAPI
01346 VOID
01347 APIENTRY
01348 EngClearEvent(
01349     _In_ PEVENT pEvent);
01350 
01351 WIN32KAPI
01352 FD_GLYPHSET*
01353 APIENTRY
01354 EngComputeGlyphSet(
01355     _In_ INT nCodePage,
01356     _In_ INT nFirstChar,
01357     _In_ INT cChars);
01358 
01359 /* EngControlSprites.fl constants */
01360 #define ECS_TEARDOWN                      0x00000001
01361 #define ECS_REDRAW                        0x00000002
01362 
01363 WIN32KAPI
01364 BOOL
01365 APIENTRY
01366 EngControlSprites(
01367     _Inout_ WNDOBJ *pwo,
01368     _In_ FLONG fl);
01369 
01370 WIN32KAPI
01371 BOOL
01372 APIENTRY
01373 EngCopyBits(
01374     _In_ SURFOBJ *psoDest,
01375     _In_ SURFOBJ *psoSrc,
01376     _In_opt_ CLIPOBJ *pco,
01377     _In_opt_ XLATEOBJ *pxlo,
01378     _In_ RECTL *prclDest,
01379     _In_ POINTL *pptlSrc);
01380 
01381 WIN32KAPI
01382 HBITMAP
01383 APIENTRY
01384 EngCreateBitmap(
01385     _In_ SIZEL sizl,
01386     _In_ LONG lWidth,
01387     _In_ ULONG iFormat,
01388     _In_ FLONG fl,
01389     _In_opt_ PVOID pvBits);
01390 
01391 WIN32KAPI
01392 CLIPOBJ*
01393 APIENTRY
01394 EngCreateClip(VOID);
01395 
01396 _Must_inspect_result_
01397 WIN32KAPI
01398 HBITMAP
01399 APIENTRY
01400 EngCreateDeviceBitmap(
01401     _In_ DHSURF dhsurf,
01402     _In_ SIZEL sizl,
01403     _In_ ULONG iFormatCompat);
01404 
01405 _Must_inspect_result_
01406 WIN32KAPI
01407 HSURF
01408 APIENTRY
01409 EngCreateDeviceSurface(
01410     _In_ DHSURF dhsurf,
01411     _In_ SIZEL sizl,
01412     _In_ ULONG iFormatCompat);
01413 
01414 _Must_inspect_result_
01415 WIN32KAPI
01416 HDRVOBJ
01417 APIENTRY
01418 EngCreateDriverObj(
01419     _In_ PVOID pvObj,
01420     _In_opt_ FREEOBJPROC pFreeObjProc,
01421     _In_ HDEV hdev);
01422 
01423 WIN32KAPI
01424 BOOL
01425 APIENTRY
01426 EngCreateEvent(
01427     _Deref_out_opt_ PEVENT *ppEvent);
01428 
01429 /* EngCreatePalette.iMode constants */
01430 #define PAL_INDEXED                       0x00000001
01431 #define PAL_BITFIELDS                     0x00000002
01432 #define PAL_RGB                           0x00000004
01433 #define PAL_BGR                           0x00000008
01434 #define PAL_CMYK                          0x00000010
01435 
01436 _Must_inspect_result_
01437 WIN32KAPI
01438 HPALETTE
01439 APIENTRY
01440 EngCreatePalette(
01441     _In_ ULONG iMode,
01442     _In_ ULONG cColors,
01443     _In_ ULONG *pulColors,
01444     _In_ FLONG flRed,
01445     _In_ FLONG flGreen,
01446     _In_ FLONG flBlue);
01447 
01448 WIN32KAPI
01449 PATHOBJ*
01450 APIENTRY
01451 EngCreatePath(VOID);
01452 
01453 WIN32KAPI
01454 HSEMAPHORE
01455 APIENTRY
01456 EngCreateSemaphore(VOID);
01457 
01458 /* EngCreateWnd.fl constants */
01459 #define WO_RGN_CLIENT_DELTA               0x00000001
01460 #define WO_RGN_CLIENT                     0x00000002
01461 #define WO_RGN_SURFACE_DELTA              0x00000004
01462 #define WO_RGN_SURFACE                    0x00000008
01463 #define WO_RGN_UPDATE_ALL                 0x00000010
01464 #define WO_RGN_WINDOW                     0x00000020
01465 #define WO_DRAW_NOTIFY                    0x00000040
01466 #define WO_SPRITE_NOTIFY                  0x00000080
01467 #define WO_RGN_DESKTOP_COORD              0x00000100
01468 #if (NTDDI_VERSION >= NTDDI_VISTA)
01469 #define WO_RGN_SPRITE                     0x00000200
01470 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
01471 
01472 _Must_inspect_result_
01473 WIN32KAPI
01474 WNDOBJ*
01475 APIENTRY
01476 EngCreateWnd(
01477     _In_ SURFOBJ *pso,
01478     _In_ HWND hwnd,
01479     _In_ WNDOBJCHANGEPROC pfn,
01480     _In_ FLONG fl,
01481     _In_ INT iPixelFormat);
01482 
01483 _Analysis_noreturn_
01484 WIN32KAPI
01485 VOID
01486 APIENTRY
01487 EngDebugBreak(VOID);
01488 
01489 WIN32KAPI
01490 VOID
01491 APIENTRY
01492 EngDebugPrint(
01493     _In_z_ PCHAR StandardPrefix,
01494     _In_z_ PCHAR DebugMessage,
01495     _In_ va_list ap);
01496 
01497 WIN32KAPI
01498 VOID
01499 APIENTRY
01500 EngDeleteClip(
01501     _In_ _Post_ptr_invalid_ CLIPOBJ *pco);
01502 
01503 WIN32KAPI
01504 BOOL
01505 APIENTRY
01506 EngDeleteDriverObj(
01507     _In_ _Post_ptr_invalid_ HDRVOBJ hdo,
01508     _In_ BOOL bCallBack,
01509     _In_ BOOL bLocked);
01510 
01511 WIN32KAPI
01512 BOOL
01513 APIENTRY
01514 EngDeleteEvent(
01515     _In_ _Post_ptr_invalid_ PEVENT pEvent);
01516 
01517 WIN32KAPI
01518 BOOL
01519 APIENTRY
01520 EngDeleteFile(
01521     _In_ LPWSTR pwszFileName);
01522 
01523 WIN32KAPI
01524 BOOL
01525 APIENTRY
01526 EngDeletePalette(
01527     _In_ _Post_ptr_invalid_ HPALETTE hpal);
01528 
01529 WIN32KAPI
01530 VOID
01531 APIENTRY
01532 EngDeletePath(
01533     _In_ _Post_ptr_invalid_ PATHOBJ *ppo);
01534 
01535 WIN32KAPI
01536 VOID
01537 APIENTRY
01538 EngDeleteSafeSemaphore(
01539     _Inout_ ENGSAFESEMAPHORE *pssem);
01540 
01541 WIN32KAPI
01542 VOID
01543 APIENTRY
01544 EngDeleteSemaphore(
01545     _In_ _Post_ptr_invalid_ HSEMAPHORE hsem);
01546 
01547 WIN32KAPI
01548 BOOL
01549 APIENTRY
01550 EngDeleteSurface(
01551     _In_ _Post_ptr_invalid_ HSURF hsurf);
01552 
01553 WIN32KAPI
01554 VOID
01555 APIENTRY
01556 EngDeleteWnd(
01557     _In_ _Post_ptr_invalid_ WNDOBJ *pwo);
01558 
01559 WIN32KAPI
01560 DWORD
01561 APIENTRY
01562 EngDeviceIoControl(
01563     _In_ HANDLE hDevice,
01564     _In_ DWORD dwIoControlCode,
01565     _In_opt_bytecount_(cjInBufferSize) LPVOID lpInBuffer,
01566     _In_ DWORD cjInBufferSize,
01567     _Out_opt_bytecap_(cjOutBufferSize) LPVOID lpOutBuffer,
01568     _In_ DWORD cjOutBufferSize,
01569     _Out_ LPDWORD lpBytesReturned);
01570 
01571 #define DM_DEFAULT                        0x00000001
01572 #define DM_MONOCHROME                     0x00000002
01573 
01574 WIN32KAPI
01575 ULONG
01576 APIENTRY
01577 EngDitherColor(
01578     _In_ HDEV hdev,
01579     _In_ ULONG iMode,
01580     _In_ ULONG rgb,
01581     _When_(iMode == DM_DEFAULT, _Out_writes_bytes_(16*8))
01582     _When_(iMode == DM_MONOCHROME, _Out_writes_bytes_(8))
01583         ULONG *pul);
01584 
01585 WIN32KAPI
01586 BOOL
01587 APIENTRY
01588 EngEnumForms(
01589     _In_ HANDLE hPrinter,
01590     _In_ DWORD Level,
01591     _Out_writes_bytes_opt_(cbBuf) LPBYTE pForm,
01592     _In_ DWORD cbBuf,
01593     _Out_ LPDWORD pcbNeeded,
01594     _Out_ LPDWORD pcReturned);
01595 
01596 WIN32KAPI
01597 BOOL
01598 APIENTRY
01599 EngEraseSurface(
01600     _In_ SURFOBJ *pso,
01601     _In_ RECTL *prcl,
01602     _In_ ULONG iColor);
01603 
01604 WIN32KAPI
01605 BOOL
01606 APIENTRY
01607 EngFillPath(
01608     _Inout_ SURFOBJ *pso,
01609     _In_ PATHOBJ *ppo,
01610     _In_ CLIPOBJ *pco,
01611     _In_ BRUSHOBJ *pbo,
01612     _In_ POINTL *pptlBrushOrg,
01613     _In_ MIX mix,
01614     _In_ FLONG flOptions);
01615 
01616 WIN32KAPI
01617 PVOID
01618 APIENTRY
01619 EngFindImageProcAddress(
01620     _In_ HANDLE hModule,
01621     _In_ LPSTR lpProcName);
01622 
01623 WIN32KAPI
01624 PVOID
01625 APIENTRY
01626 EngFindResource(
01627     _In_ HANDLE h,
01628     _In_ INT iName,
01629     _In_ INT iType,
01630     _Out_ PULONG pulSize);
01631 
01632 _Must_inspect_result_
01633 _Ret_opt_bytecap_(cjSize)
01634 WIN32KAPI
01635 PVOID
01636 APIENTRY
01637 EngFntCacheAlloc(
01638     _In_ ULONG ulFastCheckSum,
01639     _In_ ULONG cjSize);
01640 
01641 /* EngFntCacheFault.iFaultMode constants */
01642 #define ENG_FNT_CACHE_READ_FAULT          0x00000001
01643 #define ENG_FNT_CACHE_WRITE_FAULT         0x00000002
01644 
01645 WIN32KAPI
01646 VOID
01647 APIENTRY
01648 EngFntCacheFault(
01649     _In_ ULONG ulFastCheckSum,
01650     _In_ ULONG iFaultMode);
01651 
01652 WIN32KAPI
01653 PVOID
01654 APIENTRY
01655 EngFntCacheLookUp(
01656     _In_ ULONG FastCheckSum,
01657     _Out_ ULONG *pulSize);
01658 
01659 #ifdef USERMODE_DRIVER
01660 
01661 #define EngFreeMem(p)               GlobalFree((HGLOBAL) (p))
01662 #define EngFreePrivateUserMem( psl, p)        GlobalFree((HGLOBAL) (p))
01663 #define EngFreeUserMem(p)           GlobalFree((HGLOBAL) (p))
01664 
01665 #else /* !USERMODE_DRIVER */
01666 
01667 WIN32KAPI
01668 VOID
01669 APIENTRY
01670 EngFreeMem(
01671     _In_ _Post_ptr_invalid_ PVOID pv);
01672 
01673 WIN32KAPI
01674 VOID
01675 APIENTRY
01676 EngFreePrivateUserMem(
01677     _In_ PDD_SURFACE_LOCAL psl,
01678     _In_ _Post_ptr_invalid_ PVOID  pv);
01679 
01680 WIN32KAPI
01681 VOID
01682 APIENTRY
01683 EngFreeUserMem(
01684     _In_ _Post_ptr_invalid_ PVOID pv);
01685 
01686 #endif /* !USERMODE_DRIVER */
01687 
01688 WIN32KAPI
01689 VOID
01690 APIENTRY
01691 EngFreeModule(
01692     _In_ HANDLE h);
01693 
01694 
01695 WIN32KAPI
01696 VOID
01697 APIENTRY
01698 EngGetCurrentCodePage(
01699     _Out_ PUSHORT OemCodePage,
01700     _Out_ PUSHORT AnsiCodePage);
01701 
01702 WIN32KAPI
01703 HANDLE
01704 APIENTRY
01705 EngGetCurrentProcessId(VOID);
01706 
01707 WIN32KAPI
01708 HANDLE
01709 APIENTRY
01710 EngGetCurrentThreadId(VOID);
01711 
01712 _Must_inspect_result_ _Ret_z_
01713 WIN32KAPI
01714 LPWSTR
01715 APIENTRY
01716 EngGetDriverName(
01717     _In_ HDEV hdev);
01718 
01719 WIN32KAPI
01720 BOOL
01721 APIENTRY
01722 EngGetFileChangeTime(
01723     _In_ HANDLE h,
01724     _Out_ LARGE_INTEGER *pChangeTime);
01725 
01726 WIN32KAPI
01727 BOOL
01728 APIENTRY
01729 EngGetFilePath(
01730     _In_ HANDLE h,
01731     _Out_ WCHAR (*pDest)[MAX_PATH+1]);
01732 
01733 WIN32KAPI
01734 BOOL
01735 APIENTRY
01736 EngGetForm(
01737     _In_ HANDLE hPrinter,
01738     _In_ LPWSTR pFormName,
01739     _In_ DWORD Level,
01740     _In_reads_bytes_opt_(cbBuf) LPBYTE pForm,
01741     _In_ DWORD cbBuf,
01742     _Out_ LPDWORD pcbNeeded);
01743 
01744 #ifdef USERMODE_DRIVER
01745 #define EngGetLastError GetLastError
01746 #else
01747 WIN32KAPI
01748 ULONG
01749 APIENTRY
01750 EngGetLastError(VOID);
01751 #endif
01752 
01753 WIN32KAPI
01754 BOOL
01755 APIENTRY
01756 EngGetPrinter(
01757     _In_ HANDLE hPrinter,
01758     _In_ DWORD dwLevel,
01759     _Out_writes_bytes_opt_(cbBuf) LPBYTE pPrinter,
01760     _In_ DWORD  cbBuf,
01761     _Out_ LPDWORD pcbNeeded);
01762 
01763 WIN32KAPI
01764 DWORD
01765 APIENTRY
01766 EngGetPrinterData(
01767     _In_ HANDLE hPrinter,
01768     _In_ LPWSTR pValueName,
01769     _Out_opt_ LPDWORD pType,
01770     _Out_writes_bytes_opt_(cjSize) LPBYTE pData,
01771     _In_ DWORD cjSize,
01772     _Out_ LPDWORD pcjNeeded);
01773 
01774 WIN32KAPI
01775 LPWSTR
01776 APIENTRY
01777 EngGetPrinterDataFileName(
01778     _In_ HDEV hdev);
01779 
01780 WIN32KAPI
01781 BOOL
01782 APIENTRY
01783 EngGetPrinterDriver(
01784     _In_ HANDLE hPrinter,
01785     _In_opt_ LPWSTR pEnvironment,
01786     _In_ DWORD dwLevel,
01787     _Out_writes_bytes_opt_(cjBufSize) BYTE *lpbDrvInfo,
01788     _In_ DWORD cjBufSize,
01789     _Out_ DWORD *pcjNeeded);
01790 
01791 WIN32KAPI
01792 HANDLE
01793 APIENTRY
01794 EngGetProcessHandle(VOID);
01795 
01796 WIN32KAPI
01797 BOOL
01798 APIENTRY
01799 EngGetType1FontList(
01800     _In_ HDEV hdev,
01801     _Out_writes_bytes_opt_(cjType1Buffer) TYPE1_FONT *pType1Buffer,
01802     _In_ ULONG cjType1Buffer,
01803     _Out_ PULONG pulLocalFonts,
01804     _Out_ PULONG pulRemoteFonts,
01805     _Out_ LARGE_INTEGER *pLastModified);
01806 
01807 WIN32KAPI
01808 BOOL
01809 APIENTRY
01810 EngGradientFill(
01811     _Inout_ SURFOBJ *psoDest,
01812     _In_ CLIPOBJ *pco,
01813     _In_opt_ XLATEOBJ *pxlo,
01814     _In_ TRIVERTEX *pVertex,
01815     _In_ ULONG nVertex,
01816     _In_ PVOID pMesh,
01817     _In_ ULONG nMesh,
01818     _In_ RECTL *prclExtents,
01819     _In_ POINTL *pptlDitherOrg,
01820     _In_ ULONG ulMode);
01821 
01822 /* EngHangNotification return values */
01823 #define EHN_RESTORED                      0x00000000
01824 #define EHN_ERROR                         0x00000001
01825 
01826 WIN32KAPI
01827 ULONG
01828 APIENTRY
01829 EngHangNotification(
01830     _In_ HDEV hDev,
01831     _Reserved_ PVOID Reserved);
01832 
01833 WIN32KAPI
01834 BOOL
01835 APIENTRY
01836 EngInitializeSafeSemaphore(
01837     _Out_ ENGSAFESEMAPHORE *pssem);
01838 
01839 WIN32KAPI
01840 BOOL
01841 APIENTRY
01842 EngIsSemaphoreOwned(
01843     _In_ HSEMAPHORE hsem);
01844 
01845 WIN32KAPI
01846 BOOL
01847 APIENTRY
01848 EngIsSemaphoreOwnedByCurrentThread(
01849     _In_ HSEMAPHORE hsem);
01850 
01851 WIN32KAPI
01852 BOOL
01853 APIENTRY
01854 EngLineTo(
01855     _Inout_ SURFOBJ *pso,
01856     _In_ CLIPOBJ *pco,
01857     _In_ BRUSHOBJ *pbo,
01858     _In_ LONG x1,
01859     _In_ LONG y1,
01860     _In_ LONG x2,
01861     _In_ LONG y2,
01862     _In_opt_ RECTL *prclBounds,
01863     _In_ MIX mix);
01864 
01865 WIN32KAPI
01866 HANDLE
01867 APIENTRY
01868 EngLoadImage(
01869     _In_ LPWSTR pwszDriver);
01870 
01871 WIN32KAPI
01872 HANDLE
01873 APIENTRY
01874 EngLoadModule(
01875     _In_ LPWSTR pwsz);
01876 
01877 WIN32KAPI
01878 HANDLE
01879 APIENTRY
01880 EngLoadModuleForWrite(
01881     _In_ LPWSTR pwsz,
01882     _In_ ULONG cjSizeOfModule);
01883 
01884 WIN32KAPI
01885 PDD_SURFACE_LOCAL
01886 APIENTRY
01887 EngLockDirectDrawSurface(
01888     _In_ HANDLE hSurface);
01889 
01890 WIN32KAPI
01891 DRIVEROBJ*
01892 APIENTRY
01893 EngLockDriverObj(
01894     _In_ HDRVOBJ hdo);
01895 
01896 WIN32KAPI
01897 SURFOBJ*
01898 APIENTRY
01899 EngLockSurface(
01900     _In_ HSURF hsurf);
01901 
01902 WIN32KAPI
01903 BOOL
01904 APIENTRY
01905 EngLpkInstalled(VOID);
01906 
01907 WIN32KAPI
01908 PEVENT
01909 APIENTRY
01910 EngMapEvent(
01911     _In_ HDEV hDev,
01912     _In_ HANDLE hUserObject,
01913     _Reserved_ PVOID Reserved1,
01914     _Reserved_ PVOID Reserved2,
01915     _Reserved_ PVOID Reserved3);
01916 
01917 _Success_(return != 0)
01918 _When_(cjSize != 0, _At_(return, _Out_writes_bytes_(cjSize)))
01919 WIN32KAPI
01920 PVOID
01921 APIENTRY
01922 EngMapFile(
01923     _In_ LPWSTR pwsz,
01924     _In_ ULONG cjSize,
01925     _Out_ ULONG_PTR *piFile);
01926 
01927 WIN32KAPI
01928 BOOL
01929 APIENTRY
01930 EngMapFontFile(
01931     _In_ ULONG_PTR iFile,
01932     _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
01933     _Out_ ULONG *pcjBuf);
01934 
01935 WIN32KAPI
01936 BOOL
01937 APIENTRY
01938 EngMapFontFileFD(
01939     _In_ ULONG_PTR iFile,
01940     _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
01941     _Out_ ULONG *pcjBuf);
01942 
01943 WIN32KAPI
01944 PVOID
01945 APIENTRY
01946 EngMapModule(
01947     _In_ HANDLE h,
01948     _Out_ PULONG pSize);
01949 
01950 WIN32KAPI
01951 BOOL
01952 APIENTRY
01953 EngMarkBandingSurface(
01954     _In_ HSURF hsurf);
01955 
01956 /* EngModifySurface.flSurface constants */
01957 #define MS_NOTSYSTEMMEMORY                0x00000001
01958 #define MS_SHAREDACCESS                   0x00000002
01959 
01960 WIN32KAPI
01961 BOOL
01962 APIENTRY
01963 EngModifySurface(
01964     _In_ HSURF hsurf,
01965     _In_ HDEV hdev,
01966     _In_ FLONG flHooks,
01967     _In_ FLONG flSurface,
01968     _In_ DHSURF dhsurf,
01969     _In_ PVOID pvScan0,
01970     _In_ LONG lDelta,
01971     _Reserved_ PVOID pvReserved);
01972 
01973 WIN32KAPI
01974 VOID
01975 APIENTRY
01976 EngMovePointer(
01977     _In_ SURFOBJ *pso,
01978     _In_ LONG x,
01979     _In_ LONG y,
01980     _In_ RECTL *prcl);
01981 
01982 #ifdef USERMODE_DRIVER
01983 #define EngMulDiv MulDiv
01984 #else /* !USERMODE_DRIVER */
01985 WIN32KAPI
01986 INT
01987 APIENTRY
01988 EngMulDiv(
01989     _In_ INT a,
01990     _In_ INT b,
01991     _In_ INT c);
01992 #endif /* !USERMODE_DRIVER */
01993 
01994 WIN32KAPI
01995 VOID
01996 APIENTRY
01997 EngMultiByteToUnicodeN(
01998     _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) LPWSTR UnicodeString,
01999     _In_ ULONG MaxBytesInUnicodeString,
02000     _Out_opt_ PULONG BytesInUnicodeString,
02001     _In_reads_bytes_(BytesInMultiByteString) PCHAR MultiByteString,
02002     _In_ ULONG BytesInMultiByteString);
02003 
02004 WIN32KAPI
02005 INT
02006 APIENTRY
02007 EngMultiByteToWideChar(
02008     _In_ UINT CodePage,
02009     _Out_writes_bytes_opt_(cjWideCharString) LPWSTR WideCharString,
02010     _In_ INT cjWideCharString,
02011     _In_reads_bytes_opt_(cjMultiByteString) LPSTR MultiByteString,
02012     _In_ INT cjMultiByteString);
02013 
02014 WIN32KAPI
02015 BOOL
02016 APIENTRY
02017 EngPaint(
02018     _In_ SURFOBJ *pso,
02019     _In_ CLIPOBJ *pco,
02020     _In_ BRUSHOBJ *pbo,
02021     _In_ POINTL *pptlBrushOrg,
02022     _In_ MIX mix);
02023 
02024 WIN32KAPI
02025 BOOL
02026 APIENTRY
02027 EngPlgBlt(
02028     _In_ SURFOBJ *psoTrg,
02029     _In_ SURFOBJ *psoSrc,
02030     _In_opt_ SURFOBJ *psoMsk,
02031     _In_ CLIPOBJ *pco,
02032     _In_opt_ XLATEOBJ *pxlo,
02033     _In_ COLORADJUSTMENT *pca,
02034     _In_ POINTL *pptlBrushOrg,
02035     _In_ POINTFIX *pptfx,
02036     _In_ RECTL *prcl,
02037     _When_(psoMsk, _In_) POINTL *pptl,
02038     _In_ ULONG iMode);
02039 
02040 WIN32KAPI
02041 VOID
02042 APIENTRY
02043 EngProbeForRead(
02044     _In_reads_bytes_(Length) PVOID Address,
02045 #if (NTDDI_VERSION <= NTDDI_WINXP)
02046     _In_ ULONG  Length,
02047 #else
02048     _In_ SIZE_T Length,
02049 #endif
02050     _In_ ULONG Alignment);
02051 
02052 WIN32KAPI
02053 VOID
02054 APIENTRY
02055 EngProbeForReadAndWrite(
02056     _Inout_updates_bytes_(Length) PVOID Address,
02057 #if (NTDDI_VERSION <= NTDDI_WINXP)
02058     _In_ ULONG  Length,
02059 #else
02060     _In_ SIZE_T Length,
02061 #endif
02062     _In_ ULONG Alignment);
02063 
02064 typedef enum _ENG_DEVICE_ATTRIBUTE {
02065   QDA_RESERVED = 0,
02066   QDA_ACCELERATION_LEVEL
02067 } ENG_DEVICE_ATTRIBUTE;
02068 
02069 WIN32KAPI
02070 BOOL
02071 APIENTRY
02072 EngQueryDeviceAttribute(
02073     _In_ HDEV hdev,
02074     _In_ ENG_DEVICE_ATTRIBUTE devAttr,
02075     _In_reads_bytes_(cjInSize) PVOID pvIn,
02076     _In_ ULONG cjInSize,
02077     _Out_writes_bytes_(cjOutSize) PVOID pvOut,
02078     _In_ ULONG cjOutSize);
02079 
02080 WIN32KAPI
02081 LARGE_INTEGER
02082 APIENTRY
02083 EngQueryFileTimeStamp(
02084     _In_ LPWSTR pwsz);
02085 
02086 WIN32KAPI
02087 VOID
02088 APIENTRY
02089 EngQueryLocalTime(
02090     _Out_ PENG_TIME_FIELDS ptf);
02091 
02092 WIN32KAPI
02093 ULONG
02094 APIENTRY
02095 EngQueryPalette(
02096     _In_ HPALETTE hPal,
02097     _Out_ ULONG *piMode,
02098     _In_ ULONG cColors,
02099     _Out_writes_opt_(cColors) ULONG *pulColors);
02100 
02101 WIN32KAPI
02102 VOID
02103 APIENTRY
02104 EngQueryPerformanceCounter(
02105     _Out_ LONGLONG *pPerformanceCount);
02106 
02107 WIN32KAPI
02108 VOID
02109 APIENTRY
02110 EngQueryPerformanceFrequency(
02111     _Out_ LONGLONG *pFrequency);
02112 
02113 typedef enum _ENG_SYSTEM_ATTRIBUTE {
02114   EngProcessorFeature = 1,
02115   EngNumberOfProcessors,
02116   EngOptimumAvailableUserMemory,
02117   EngOptimumAvailableSystemMemory,
02118 } ENG_SYSTEM_ATTRIBUTE;
02119 
02120 #define QSA_MMX                           0x00000100
02121 #define QSA_SSE                           0x00002000
02122 #define QSA_3DNOW                         0x00004000
02123 
02124 WIN32KAPI
02125 BOOL
02126 APIENTRY
02127 EngQuerySystemAttribute(
02128     _In_ ENG_SYSTEM_ATTRIBUTE CapNum,
02129     _Out_ PDWORD pCapability);
02130 
02131 WIN32KAPI
02132 LONG
02133 APIENTRY
02134 EngReadStateEvent(
02135     _In_ PEVENT pEvent);
02136 
02137 WIN32KAPI
02138 VOID
02139 APIENTRY
02140 EngReleaseSemaphore(
02141     _In_ HSEMAPHORE hsem);
02142 
02143 WIN32KAPI
02144 BOOL
02145 APIENTRY
02146 EngRestoreFloatingPointState(
02147     _In_ VOID *pBuffer);
02148 
02149 WIN32KAPI
02150 ULONG
02151 APIENTRY
02152 EngSaveFloatingPointState(
02153     _Out_ VOID *pBuffer,
02154     _In_ ULONG cjBufferSize);
02155 
02156 WIN32KAPI
02157 HANDLE
02158 APIENTRY
02159 EngSecureMem(
02160     _In_reads_bytes_(cjLength) PVOID Address,
02161     _In_ ULONG cjLength);
02162 
02163 WIN32KAPI
02164 LONG
02165 APIENTRY
02166 EngSetEvent(
02167     _In_ PEVENT pEvent);
02168 
02169 #ifdef USERMODE_DRIVER
02170 #define EngSetLastError SetLastError
02171 #else
02172 WIN32KAPI
02173 VOID
02174 APIENTRY
02175 EngSetLastError(
02176     _In_ ULONG iError);
02177 #endif
02178 
02179 WIN32KAPI
02180 ULONG
02181 APIENTRY
02182 EngSetPointerShape(
02183     _In_ SURFOBJ *pso,
02184     _In_opt_ SURFOBJ *psoMask,
02185     _In_opt_ SURFOBJ *psoColor,
02186     _In_opt_ XLATEOBJ *pxlo,
02187     _In_ LONG xHot,
02188     _In_ LONG yHot,
02189     _In_ LONG x,
02190     _In_ LONG y,
02191     _In_ RECTL *prcl,
02192     _In_ FLONG fl);
02193 
02194 WIN32KAPI
02195 BOOL
02196 APIENTRY
02197 EngSetPointerTag(
02198     _In_ HDEV hdev,
02199     _In_opt_ SURFOBJ *psoMask,
02200     _In_opt_ SURFOBJ *psoColor,
02201     _Reserved_ XLATEOBJ *pxlo,
02202     _In_ FLONG fl);
02203 
02204 WIN32KAPI
02205 DWORD
02206 APIENTRY
02207 EngSetPrinterData(
02208     _In_ HANDLE hPrinter,
02209     _In_ LPWSTR pType,
02210     _In_ DWORD dwType,
02211     _In_reads_bytes_(cjPrinterData) LPBYTE lpbPrinterData,
02212     _In_ DWORD cjPrinterData);
02213 
02214 typedef int (CDECL *SORTCOMP)(const void *pv1, const void *pv2);
02215 
02216 WIN32KAPI
02217 VOID
02218 APIENTRY
02219 EngSort(
02220     _Inout_updates_bytes_(c * cjElem) PBYTE pjBuf,
02221     _In_ ULONG c,
02222     _In_ ULONG cjElem,
02223     _In_ SORTCOMP pfnComp);
02224 
02225 WIN32KAPI
02226 BOOL
02227 APIENTRY
02228 EngStretchBlt(
02229     _In_ SURFOBJ *psoDest,
02230     _In_ SURFOBJ *psoSrc,
02231     _In_opt_ SURFOBJ *psoMask,
02232     _In_opt_ CLIPOBJ *pco,
02233     _In_opt_ XLATEOBJ *pxlo,
02234     _In_opt_ COLORADJUSTMENT *pca,
02235     _In_ POINTL *pptlHTOrg,
02236     _In_ RECTL *prclDest,
02237     _In_ RECTL *prclSrc,
02238     _When_(psoMask, _In_) POINTL *pptlMask,
02239     _In_ ULONG iMode);
02240 
02241 WIN32KAPI
02242 BOOL
02243 APIENTRY
02244 EngStretchBltROP(
02245     _In_ SURFOBJ *psoDest,
02246     _In_ SURFOBJ *psoSrc,
02247     _In_opt_ SURFOBJ *psoMask,
02248     _In_opt_ CLIPOBJ *pco,
02249     _In_opt_ XLATEOBJ *pxlo,
02250     _In_opt_ COLORADJUSTMENT *pca,
02251     _In_ POINTL *pptlHTOrg,
02252     _In_ RECTL *prclDest,
02253     _In_ RECTL *prclSrc,
02254     _When_(psoMask, _In_) POINTL *pptlMask,
02255     _In_ ULONG iMode,
02256     _In_ BRUSHOBJ *pbo,
02257     _In_ DWORD rop4);
02258 
02259 WIN32KAPI
02260 BOOL
02261 APIENTRY
02262 EngStrokeAndFillPath(
02263     _Inout_ SURFOBJ *pso,
02264     _In_ PATHOBJ *ppo,
02265     _In_ CLIPOBJ *pco,
02266     _In_ XFORMOBJ *pxo,
02267     _In_ BRUSHOBJ *pboStroke,
02268     _In_ LINEATTRS *plineattrs,
02269     _In_ BRUSHOBJ *pboFill,
02270     _In_ POINTL *pptlBrushOrg,
02271     _In_ MIX mixFill,
02272     _In_ FLONG flOptions);
02273 
02274 WIN32KAPI
02275 BOOL
02276 APIENTRY
02277 EngStrokePath(
02278     _In_ SURFOBJ *pso,
02279     _In_ PATHOBJ *ppo,
02280     _In_ CLIPOBJ *pco,
02281     _In_ XFORMOBJ *pxo,
02282     _In_ BRUSHOBJ *pbo,
02283     _In_ POINTL *pptlBrushOrg,
02284     _In_ LINEATTRS *plineattrs,
02285     _In_ MIX mix);
02286 
02287 WIN32KAPI
02288 BOOL
02289 APIENTRY
02290 EngTextOut(
02291     _In_ SURFOBJ *pso,
02292     _In_ STROBJ *pstro,
02293     _In_ FONTOBJ *pfo,
02294     _In_ CLIPOBJ *pco,
02295     _Null_ RECTL *prclExtra,
02296     _In_opt_ RECTL *prclOpaque,
02297     _In_ BRUSHOBJ *pboFore,
02298     _In_ BRUSHOBJ *pboOpaque,
02299     _In_ POINTL *pptlOrg,
02300     _In_ MIX mix);
02301 
02302 WIN32KAPI
02303 BOOL
02304 APIENTRY
02305 EngTransparentBlt(
02306     _In_ SURFOBJ *psoDst,
02307     _In_ SURFOBJ *psoSrc,
02308     _In_opt_ CLIPOBJ *pco,
02309     _In_opt_ XLATEOBJ *pxlo,
02310     _In_ RECTL *prclDst,
02311     _In_ RECTL *prclSrc,
02312     _In_ ULONG iTransColor,
02313     _In_ ULONG ulReserved);
02314 
02315 WIN32KAPI
02316 VOID
02317 APIENTRY
02318 EngUnicodeToMultiByteN(
02319     _Out_writes_bytes_to_(cjMultiByteBuf, *pcjMultiByteString) PCHAR pchMultiByteString,
02320     _In_ ULONG cjMultiByteBuf,
02321     _Out_opt_ PULONG pcjMultiByteString,
02322     _In_reads_bytes_(cjUnicodeString) PWSTR pwszUnicodeString,
02323     _In_ ULONG cjUnicodeString);
02324 
02325 WIN32KAPI
02326 VOID
02327 APIENTRY
02328 EngUnloadImage(
02329     _In_ HANDLE hModule);
02330 
02331 WIN32KAPI
02332 BOOL
02333 APIENTRY
02334 EngUnlockDirectDrawSurface(
02335     _In_ PDD_SURFACE_LOCAL pSurface);
02336 
02337 WIN32KAPI
02338 BOOL
02339 APIENTRY
02340 EngUnlockDriverObj(
02341     _In_ _Post_ptr_invalid_ HDRVOBJ hdo);
02342 
02343 WIN32KAPI
02344 VOID
02345 APIENTRY
02346 EngUnlockSurface(
02347     _In_ _Post_ptr_invalid_ SURFOBJ *pso);
02348 
02349 WIN32KAPI
02350 BOOL
02351 APIENTRY
02352 EngUnmapEvent(
02353     _In_ PEVENT pEvent);
02354 
02355 WIN32KAPI
02356 BOOL
02357 APIENTRY
02358 EngUnmapFile(
02359     _In_ ULONG_PTR iFile);
02360 
02361 WIN32KAPI
02362 VOID
02363 APIENTRY
02364 EngUnmapFontFile(
02365     _In_ ULONG_PTR iFile);
02366 
02367 WIN32KAPI
02368 VOID
02369 APIENTRY
02370 EngUnmapFontFileFD(
02371     _In_ ULONG_PTR iFile);
02372 
02373 WIN32KAPI
02374 VOID
02375 APIENTRY
02376 EngUnsecureMem(
02377     _In_ HANDLE hSecure);
02378 
02379 WIN32KAPI
02380 BOOL
02381 APIENTRY
02382 EngWaitForSingleObject(
02383     _In_ PEVENT pEvent,
02384     _In_opt_ PLARGE_INTEGER pTimeOut);
02385 
02386 WIN32KAPI
02387 INT
02388 APIENTRY
02389 EngWideCharToMultiByte(
02390     _In_ UINT CodePage,
02391     _In_reads_bytes_opt_(cjWideCharString) LPWSTR pwszWideCharString,
02392     _In_ INT cjWideCharString,
02393     _Out_z_bytecap_(cjMultiByteString) LPSTR pszMultiByteString,
02394     _In_ INT cjMultiByteString);
02395 
02396 WIN32KAPI
02397 BOOL
02398 APIENTRY
02399 EngWritePrinter(
02400     _In_ HANDLE hPrinter,
02401     _In_reads_bytes_(cjBuf) LPVOID pvBuf,
02402     _In_ DWORD cjBuf,
02403     _Out_ LPDWORD pcWritten);
02404 
02405 #if defined(_X86_) && !defined(USERMODE_DRIVER)
02406 WIN32KAPI
02407 VOID
02408 APIENTRY
02409 FLOATOBJ_Add(
02410     _Inout_ PFLOATOBJ pf,
02411     _In_ PFLOATOBJ pf1);
02412 
02413 WIN32KAPI
02414 VOID
02415 APIENTRY
02416 FLOATOBJ_AddFloat(
02417     _Inout_ PFLOATOBJ pf,
02418     _In_ FLOATL f);
02419 
02420 WIN32KAPI
02421 VOID
02422 APIENTRY
02423 FLOATOBJ_AddLong(
02424     _Inout_ PFLOATOBJ pf,
02425     _In_ LONG l);
02426 
02427 WIN32KAPI
02428 VOID
02429 APIENTRY
02430 FLOATOBJ_Div(
02431     _Inout_ PFLOATOBJ pf,
02432     _In_ PFLOATOBJ pf1);
02433 
02434 WIN32KAPI
02435 VOID
02436 APIENTRY
02437 FLOATOBJ_DivFloat(
02438     _Inout_ PFLOATOBJ pf,
02439     _In_ FLOATL f);
02440 
02441 WIN32KAPI
02442 VOID
02443 APIENTRY
02444 FLOATOBJ_DivLong(
02445     _Inout_ PFLOATOBJ pf,
02446     _In_ LONG l);
02447 
02448 WIN32KAPI
02449 BOOL
02450 APIENTRY
02451 FLOATOBJ_Equal(
02452     _In_ PFLOATOBJ pf,
02453     _In_ PFLOATOBJ pf1);
02454 
02455 WIN32KAPI
02456 BOOL
02457 APIENTRY
02458 FLOATOBJ_EqualLong(
02459     _In_ PFLOATOBJ pf,
02460     _In_ LONG l);
02461 
02462 WIN32KAPI
02463 LONG
02464 APIENTRY
02465 FLOATOBJ_GetFloat(
02466     _In_ PFLOATOBJ pf);
02467 
02468 WIN32KAPI
02469 LONG
02470 APIENTRY
02471 FLOATOBJ_GetLong(
02472     _In_ PFLOATOBJ pf);
02473 
02474 WIN32KAPI
02475 BOOL
02476 APIENTRY
02477 FLOATOBJ_GreaterThan(
02478     _In_ PFLOATOBJ pf,
02479     _In_ PFLOATOBJ pf1);
02480 
02481 WIN32KAPI
02482 BOOL
02483 APIENTRY
02484 FLOATOBJ_GreaterThanLong(
02485     _In_ PFLOATOBJ pf,
02486     _In_ LONG l);
02487 
02488 WIN32KAPI
02489 BOOL
02490 APIENTRY
02491 FLOATOBJ_LessThan(
02492     _In_ PFLOATOBJ pf,
02493     _In_ PFLOATOBJ pf1);
02494 
02495 WIN32KAPI
02496 BOOL
02497 APIENTRY
02498 FLOATOBJ_LessThanLong(
02499     _In_ PFLOATOBJ pf,
02500     _In_ LONG l);
02501 
02502 WIN32KAPI
02503 VOID
02504 APIENTRY
02505 FLOATOBJ_Mul(
02506     _Inout_ PFLOATOBJ pf,
02507     _In_ PFLOATOBJ pf1);
02508 
02509 WIN32KAPI
02510 VOID
02511 APIENTRY
02512 FLOATOBJ_MulFloat(
02513     _Inout_ PFLOATOBJ pf,
02514     _In_ FLOATL f);
02515 
02516 WIN32KAPI
02517 VOID
02518 APIENTRY
02519 FLOATOBJ_MulLong(
02520     _Inout_ PFLOATOBJ pf,
02521     _In_ LONG l);
02522 
02523 WIN32KAPI
02524 VOID
02525 APIENTRY
02526 FLOATOBJ_Neg(
02527     _Inout_ PFLOATOBJ pf);
02528 
02529 WIN32KAPI
02530 VOID
02531 APIENTRY
02532 FLOATOBJ_SetFloat(
02533     _Out_ PFLOATOBJ pf,
02534     _In_ FLOATL f);
02535 
02536 WIN32KAPI
02537 VOID
02538 APIENTRY
02539 FLOATOBJ_SetLong(
02540     _Out_ PFLOATOBJ pf,
02541     _In_ LONG l);
02542 
02543 WIN32KAPI
02544 VOID
02545 APIENTRY
02546 FLOATOBJ_Sub(
02547     _Inout_ PFLOATOBJ pf,
02548     _In_ PFLOATOBJ pf1);
02549 
02550 WIN32KAPI
02551 VOID
02552 APIENTRY
02553 FLOATOBJ_SubFloat(
02554     _Inout_ PFLOATOBJ pf,
02555     _In_ FLOATL f);
02556 
02557 WIN32KAPI
02558 VOID
02559 APIENTRY
02560 FLOATOBJ_SubLong(
02561     _Inout_ PFLOATOBJ pf,
02562     _In_ LONG l);
02563 
02564 #else
02565 
02566 #define FLOATOBJ_SetFloat(pf, f)        {*(pf) = (f);}
02567 #define FLOATOBJ_SetLong(pf, l)         {*(pf) = (FLOAT)(l);}
02568 #define FLOATOBJ_GetFloat(pf)           (*(PULONG)(pf))
02569 #define FLOATOBJ_GetLong(pf)            ((LONG)*(pf))
02570 #define FLOATOBJ_Add(pf, pf1)           {*(pf) += *(pf1);}
02571 #define FLOATOBJ_AddFloat(pf, f)        {*(pf) += (f);}
02572 #define FLOATOBJ_AddLong(pf, l)         {*(pf) += (l);}
02573 #define FLOATOBJ_Sub(pf, pf1)           {*(pf) -= *(pf1);}
02574 #define FLOATOBJ_SubFloat(pf, f)        {*(pf) -= (f);}
02575 #define FLOATOBJ_SubLong(pf, l)         {*(pf) -= (l);}
02576 #define FLOATOBJ_Mul(pf, pf1)           {*(pf) *= *(pf1);}
02577 #define FLOATOBJ_MulFloat(pf, f)        {*(pf) *= (f);}
02578 #define FLOATOBJ_MulLong(pf, l)         {*(pf) *= (l);}
02579 #define FLOATOBJ_Div(pf, pf1)           {*(pf) /= *(pf1);}
02580 #define FLOATOBJ_DivFloat(pf, f)        {*(pf) /= (f);}
02581 #define FLOATOBJ_DivLong(pf, l)         {*(pf) /= (l);}
02582 #define FLOATOBJ_Neg(pf)                {*(pf) = -(*(pf));}
02583 #define FLOATOBJ_Equal(pf, pf1)         (*(pf) == *(pf1))
02584 #define FLOATOBJ_GreaterThan(pf, pf1)   (*(pf) > *(pf1))
02585 #define FLOATOBJ_LessThan(pf, pf1)      (*(pf) < *(pf1))
02586 #define FLOATOBJ_EqualLong(pf, l)       (*(pf) == (FLOAT)(l))
02587 #define FLOATOBJ_GreaterThanLong(pf, l) (*(pf) > (FLOAT)(l))
02588 #define FLOATOBJ_LessThanLong(pf, l)    (*(pf) < (FLOAT)(l))
02589 
02590 #endif
02591 
02592 WIN32KAPI
02593 ULONG
02594 APIENTRY
02595 FONTOBJ_cGetAllGlyphHandles(
02596     _In_ FONTOBJ *pfo,
02597     _Out_opt_bytecap_(return) HGLYPH *phg);
02598 
02599 WIN32KAPI
02600 ULONG
02601 APIENTRY
02602 FONTOBJ_cGetGlyphs(
02603     _In_ FONTOBJ *pfo,
02604     _In_ ULONG iMode,
02605     _In_ ULONG cGlyph,
02606     _In_count_(cGlyph) HGLYPH *phg,
02607     _Out_ PVOID *ppvGlyph);
02608 
02609 WIN32KAPI
02610 FD_GLYPHSET*
02611 APIENTRY
02612 FONTOBJ_pfdg(
02613     _In_ FONTOBJ *pfo);
02614 
02615 WIN32KAPI
02616 IFIMETRICS*
02617 APIENTRY
02618 FONTOBJ_pifi(
02619     _In_ FONTOBJ *pfo);
02620 
02621 _Ret_opt_bytecount_(*pcjTable)
02622 WIN32KAPI
02623 PBYTE
02624 APIENTRY
02625 FONTOBJ_pjOpenTypeTablePointer(
02626     _In_ FONTOBJ *pfo,
02627     _In_ ULONG ulTag,
02628     _Out_ ULONG *pcjTable);
02629 
02630 WIN32KAPI
02631 PFD_GLYPHATTR
02632 APIENTRY
02633 FONTOBJ_pQueryGlyphAttrs(
02634     _In_ FONTOBJ *pfo,
02635     _In_ ULONG iMode);
02636 
02637 _Ret_opt_bytecount_(*pcjFile)
02638 WIN32KAPI
02639 PVOID
02640 APIENTRY
02641 FONTOBJ_pvTrueTypeFontFile(
02642     _In_ FONTOBJ *pfo,
02643     _Out_ ULONG *pcjFile);
02644 
02645 WIN32KAPI
02646 LPWSTR
02647 APIENTRY
02648 FONTOBJ_pwszFontFilePaths(
02649     _In_ FONTOBJ *pfo,
02650     _Out_ ULONG *pcwc);
02651 
02652 WIN32KAPI
02653 XFORMOBJ*
02654 APIENTRY
02655 FONTOBJ_pxoGetXform(
02656     _In_ FONTOBJ *pfo);
02657 
02658 WIN32KAPI
02659 VOID
02660 APIENTRY
02661 FONTOBJ_vGetInfo(
02662     _In_ FONTOBJ *pfo,
02663     _In_ ULONG cjSize,
02664     _Out_bytecap_(cjSize) FONTINFO *pfi);
02665 
02666 #if (NTDDI_VERSION <= NTDDI_WINXP)
02667 GAMMA_TABLES*
02668 APIENTRY
02669 FONTOBJ_pGetGammaTables(
02670     _In_ FONTOBJ *pfo);
02671 #endif
02672 
02673 WIN32KAPI
02674 LONG
02675 APIENTRY
02676 HT_ComputeRGBGammaTable(
02677     _In_ USHORT GammaTableEntries,
02678     _In_ USHORT GammaTableType,
02679     _In_ USHORT RedGamma,
02680     _In_ USHORT GreenGamma,
02681     _In_ USHORT BlueGamma,
02682     _Out_writes_bytes_(GammaTableEntries * 3) LPBYTE pGammaTable);
02683 
02684 WIN32KAPI
02685 LONG
02686 APIENTRY
02687 HT_Get8BPPFormatPalette(
02688     _Out_opt_ LPPALETTEENTRY pPaletteEntry,
02689     _In_ USHORT RedGamma,
02690     _In_ USHORT GreenGamma,
02691     _In_ USHORT BlueGamma);
02692 
02693 WIN32KAPI
02694 LONG
02695 APIENTRY
02696 HT_Get8BPPMaskPalette(
02697     _Out_opt_ LPPALETTEENTRY pPaletteEntry,
02698     _In_ BOOL Use8BPPMaskPal,
02699     _In_ BYTE CMYMask,
02700     _In_ USHORT RedGamma,
02701     _In_ USHORT GreenGamma,
02702     _In_ USHORT BlueGamma);
02703 
02704 WIN32KAPI
02705 LONG
02706 APIENTRY
02707 HTUI_DeviceColorAdjustment(
02708     _In_ LPSTR pDeviceName,
02709     _Out_ PDEVHTADJDATA pDevHTAdjData);
02710 
02711 WIN32KAPI
02712 ULONG
02713 APIENTRY
02714 PALOBJ_cGetColors(
02715     _In_ PALOBJ *ppalo,
02716     _In_ ULONG iStart,
02717     _In_ ULONG cColors,
02718     _Out_writes_(cColors) ULONG *pulColors);
02719 
02720 WIN32KAPI
02721 BOOL
02722 APIENTRY
02723 PATHOBJ_bCloseFigure(
02724     _In_ PATHOBJ *ppo);
02725 
02726 WIN32KAPI
02727 BOOL
02728 APIENTRY
02729 PATHOBJ_bEnum(
02730     _In_ PATHOBJ *ppo,
02731     _Out_ PATHDATA *ppd);
02732 
02733 WIN32KAPI
02734 BOOL
02735 APIENTRY
02736 PATHOBJ_bEnumClipLines(
02737     _In_ PATHOBJ *ppo,
02738     _In_ ULONG cj,
02739     _Out_bytecap_(cj) CLIPLINE *pcl);
02740 
02741 WIN32KAPI
02742 BOOL
02743 APIENTRY
02744 PATHOBJ_bMoveTo(
02745     _In_ PATHOBJ *ppo,
02746     _In_ POINTFIX ptfx);
02747 
02748 WIN32KAPI
02749 BOOL
02750 APIENTRY
02751 PATHOBJ_bPolyBezierTo(
02752     _In_ PATHOBJ *ppo,
02753     _In_count_(cptfx) POINTFIX *pptfx,
02754     _In_ ULONG cptfx);
02755 
02756 WIN32KAPI
02757 BOOL
02758 APIENTRY
02759 PATHOBJ_bPolyLineTo(
02760     _In_ PATHOBJ *ppo,
02761     _In_count_(cptfx) POINTFIX *pptfx,
02762     _In_ ULONG cptfx);
02763 
02764 WIN32KAPI
02765 VOID
02766 APIENTRY
02767 PATHOBJ_vEnumStart(
02768     _Inout_ PATHOBJ *ppo);
02769 
02770 WIN32KAPI
02771 VOID
02772 APIENTRY
02773 PATHOBJ_vEnumStartClipLines(
02774     _Inout_ PATHOBJ *ppo,
02775     _In_ CLIPOBJ *pco,
02776     _In_ SURFOBJ *pso,
02777     _In_ LINEATTRS *pla);
02778 
02779 WIN32KAPI
02780 VOID
02781 APIENTRY
02782 PATHOBJ_vGetBounds(
02783     _In_ PATHOBJ *ppo,
02784     _Out_ PRECTFX prectfx);
02785 
02786 WIN32KAPI
02787 BOOL
02788 APIENTRY
02789 STROBJ_bEnum(
02790     _Inout_ STROBJ *pstro,
02791     _Out_ ULONG *pc,
02792     _Out_ PGLYPHPOS *ppgpos); // FIXME_ size?
02793 
02794 WIN32KAPI
02795 BOOL
02796 APIENTRY
02797 STROBJ_bEnumPositionsOnly(
02798     _In_ STROBJ *pstro,
02799     _Out_ ULONG *pc,
02800     _Out_ PGLYPHPOS *ppgpos); // FIXME_ size?
02801 
02802 WIN32KAPI
02803 BOOL
02804 APIENTRY
02805 STROBJ_bGetAdvanceWidths(
02806     _In_ STROBJ *pso,
02807     _In_ ULONG iFirst,
02808     _In_ ULONG c,
02809     _Out_cap_(c) POINTQF *pptqD);
02810 
02811 WIN32KAPI
02812 DWORD
02813 APIENTRY
02814 STROBJ_dwGetCodePage(
02815     _In_ STROBJ *pstro);
02816 
02817 WIN32KAPI
02818 FIX
02819 APIENTRY
02820 STROBJ_fxBreakExtra(
02821     _In_ STROBJ *pstro);
02822 
02823 WIN32KAPI
02824 FIX
02825 APIENTRY
02826 STROBJ_fxCharacterExtra(
02827     _In_ STROBJ *pstro);
02828 
02829 WIN32KAPI
02830 VOID
02831 APIENTRY
02832 STROBJ_vEnumStart(
02833     _In_ STROBJ *pstro);
02834 
02835 WIN32KAPI
02836 BOOL
02837 APIENTRY
02838 WNDOBJ_bEnum(
02839     _Inout_ WNDOBJ *pwo,
02840     _In_ ULONG cj,
02841     _Out_bytecap_(cj) ULONG *pul);
02842 
02843 WIN32KAPI
02844 ULONG
02845 APIENTRY
02846 WNDOBJ_cEnumStart(
02847     _Inout_ WNDOBJ *pwo,
02848     _In_ ULONG iType,
02849     _In_ ULONG iDirection,
02850     _In_ ULONG cLimit);
02851 
02852 WIN32KAPI
02853 VOID
02854 APIENTRY
02855 WNDOBJ_vSetConsumer(
02856     _Inout_ WNDOBJ *pwo,
02857     _In_ PVOID pvConsumer);
02858 
02859 /* XFORMOBJ_bApplyXform.iMode constants */
02860 #define XF_LTOL                           0L
02861 #define XF_INV_LTOL                       1L
02862 #define XF_LTOFX                          2L
02863 #define XF_INV_FXTOL                      3L
02864 
02865 WIN32KAPI
02866 BOOL
02867 APIENTRY
02868 XFORMOBJ_bApplyXform(
02869     _In_ XFORMOBJ *pxo,
02870     _In_ ULONG iMode,
02871     _In_ ULONG cPoints,
02872     _In_reads_bytes_(cPoints * sizeof(POINTL)) PVOID pvIn,
02873     _Out_writes_bytes_(cPoints * sizeof(POINTL)) PVOID pvOut);
02874 
02875 #if !defined(USERMODE_DRIVER)
02876 WIN32KAPI
02877 ULONG
02878 APIENTRY
02879 XFORMOBJ_iGetFloatObjXform(
02880     _In_ XFORMOBJ *pxo,
02881     _Out_ FLOATOBJ_XFORM *pxfo);
02882 #else
02883 #define XFORMOBJ_iGetFloatObjXform XFORMOBJ_iGetXform
02884 #endif
02885 
02886 WIN32KAPI
02887 ULONG
02888 APIENTRY
02889 XFORMOBJ_iGetXform(
02890     _In_ XFORMOBJ *pxo,
02891     _Out_ XFORML *pxform);
02892 
02893 /* XLATEOBJ_cGetPalette.iPal constants */
02894 #define XO_SRCPALETTE                     1
02895 #define XO_DESTPALETTE                    2
02896 #define XO_DESTDCPALETTE                  3
02897 #define XO_SRCBITFIELDS                   4
02898 #define XO_DESTBITFIELDS                  5
02899 
02900 WIN32KAPI
02901 ULONG
02902 APIENTRY
02903 XLATEOBJ_cGetPalette(
02904     _In_ XLATEOBJ *pxlo,
02905     _In_ ULONG iPal,
02906     _In_ ULONG cPal,
02907     _Out_cap_(cPal) ULONG *pPal);
02908 
02909 WIN32KAPI
02910 HANDLE
02911 APIENTRY
02912 XLATEOBJ_hGetColorTransform(
02913     _In_ XLATEOBJ *pxlo);
02914 
02915 WIN32KAPI
02916 ULONG
02917 APIENTRY
02918 XLATEOBJ_iXlate(
02919     _In_ XLATEOBJ *pxlo,
02920     _In_ ULONG iColor);
02921 
02922 WIN32KAPI
02923 ULONG*
02924 APIENTRY
02925 XLATEOBJ_piVector(
02926     _In_ XLATEOBJ *pxlo);
02927 
02928 
02929 /* Graphics Driver Functions */
02930 
02931 typedef BOOL
02932 (APIENTRY FN_DrvAlphaBlend)(
02933     _Inout_ SURFOBJ *psoDest,
02934     _In_ SURFOBJ *psoSrc,
02935     _In_ CLIPOBJ *pco,
02936     _In_opt_ XLATEOBJ *pxlo,
02937     _In_ RECTL *prclDest,
02938     _In_ RECTL *prclSrc,
02939     _In_ BLENDOBJ *pBlendObj);
02940 typedef FN_DrvAlphaBlend *PFN_DrvAlphaBlend;
02941 extern FN_DrvAlphaBlend DrvAlphaBlend;
02942 
02943 typedef BOOL
02944 (APIENTRY FN_DrvAssertMode)(
02945     _In_ DHPDEV dhpdev,
02946     _In_ BOOL bEnable);
02947 typedef FN_DrvAssertMode *PFN_DrvAssertMode;
02948 extern FN_DrvAssertMode DrvAssertMode;
02949 
02950 typedef BOOL
02951 (APIENTRY FN_DrvBitBlt)(
02952     _Inout_ SURFOBJ *psoTrg,
02953     _In_opt_ SURFOBJ *psoSrc,
02954     _In_opt_ SURFOBJ *psoMask,
02955     _In_ CLIPOBJ *pco,
02956     _In_opt_ XLATEOBJ *pxlo,
02957     _In_ RECTL *prclTrg,
02958     _When_(psoSrc, _In_) POINTL *pptlSrc,
02959     _When_(psoMask, _In_) POINTL *pptlMask,
02960     _In_opt_ BRUSHOBJ *pbo,
02961     _When_(pbo, _In_) POINTL *pptlBrush,
02962     _In_ ROP4 rop4);
02963 typedef FN_DrvBitBlt *PFN_DrvBitBlt;
02964 extern FN_DrvBitBlt DrvBitBlt;
02965 
02966 typedef VOID
02967 (APIENTRY FN_DrvCompletePDEV)(
02968     _In_ DHPDEV dhpdev,
02969     _In_ HDEV hdev);
02970 typedef FN_DrvCompletePDEV *PFN_DrvCompletePDEV;
02971 extern FN_DrvCompletePDEV DrvCompletePDEV;
02972 
02973 typedef BOOL
02974 (APIENTRY FN_DrvCopyBits)(
02975     _In_ SURFOBJ *psoDest,
02976     _In_ SURFOBJ *psoSrc,
02977     _In_ CLIPOBJ *pco,
02978     _In_opt_ XLATEOBJ *pxlo,
02979     _In_ RECTL *prclDest,
02980     _In_ POINTL *pptlSrc);
02981 typedef FN_DrvCopyBits *PFN_DrvCopyBits;
02982 extern FN_DrvCopyBits DrvCopyBits;
02983 
02984 typedef HBITMAP
02985 (APIENTRY FN_DrvCreateDeviceBitmap)(
02986     _In_ DHPDEV  dhpdev,
02987     _In_ SIZEL  sizl,
02988     _In_ ULONG  iFormat);
02989 typedef FN_DrvCreateDeviceBitmap *PFN_DrvCreateDeviceBitmap;
02990 extern FN_DrvCreateDeviceBitmap DrvCreateDeviceBitmap;
02991 
02992 typedef VOID
02993 (APIENTRY FN_DrvDeleteDeviceBitmap)(
02994     _In_ _Post_ptr_invalid_ DHSURF dhsurf);
02995 typedef FN_DrvDeleteDeviceBitmap *PFN_DrvDeleteDeviceBitmap;
02996 extern FN_DrvDeleteDeviceBitmap DrvDeleteDeviceBitmap;
02997 
02998 typedef HBITMAP
02999 (APIENTRY FN_DrvDeriveSurface)(
03000     _In_ DD_DIRECTDRAW_GLOBAL *pDirectDraw,
03001     _In_ DD_SURFACE_LOCAL *pSurface);
03002 typedef FN_DrvDeriveSurface *PFN_DrvDeriveSurface;
03003 extern FN_DrvDeriveSurface DrvDeriveSurface;
03004 
03005 typedef LONG
03006 (APIENTRY FN_DrvDescribePixelFormat)(
03007     _In_ DHPDEV dhpdev,
03008     _In_ LONG iPixelFormat,
03009     _In_ ULONG cjpfd,
03010     _Out_ PIXELFORMATDESCRIPTOR *ppfd);
03011 typedef FN_DrvDescribePixelFormat *PFN_DrvDescribePixelFormat;
03012 extern FN_DrvDescribePixelFormat DrvDescribePixelFormat;
03013 
03014 typedef VOID
03015 (APIENTRY FN_DrvDestroyFont)(
03016     _In_ FONTOBJ *pfo);
03017 typedef FN_DrvDestroyFont *PFN_DrvDestroyFont;
03018 extern FN_DrvDestroyFont DrvDestroyFont;
03019 
03020 typedef VOID
03021 (APIENTRY FN_DrvDisableDriver)(VOID);
03022 typedef FN_DrvDisableDriver *PFN_DrvDisableDriver;
03023 extern FN_DrvDisableDriver DrvDisableDriver;
03024 
03025 typedef VOID
03026 (APIENTRY FN_DrvDisablePDEV)(
03027     _In_ DHPDEV dhpdev);
03028 typedef FN_DrvDisablePDEV *PFN_DrvDisablePDEV;
03029 extern FN_DrvDisablePDEV DrvDisablePDEV;
03030 
03031 typedef VOID
03032 (APIENTRY FN_DrvDisableSurface)(
03033     _In_ DHPDEV dhpdev);
03034 typedef FN_DrvDisableSurface *PFN_DrvDisableSurface;
03035 extern FN_DrvDisableSurface DrvDisableSurface;
03036 
03037 typedef ULONG
03038 (APIENTRY FN_DrvDitherColor)(
03039     _In_ DHPDEV dhpdev,
03040     _In_ ULONG iMode,
03041     _In_ ULONG rgb,
03042     _Inout_updates_(8 * 8) ULONG *pul); // FIXME: compare EngDitherColor
03043 typedef FN_DrvDitherColor *PFN_DrvDitherColor;
03044 extern FN_DrvDitherColor DrvDitherColor;
03045 
03046 typedef ULONG
03047 (APIENTRY FN_DrvDrawEscape)(
03048     _In_ SURFOBJ *pso,
03049     _In_ ULONG iEsc,
03050     _In_ CLIPOBJ *pco,
03051     _In_ RECTL *prcl,
03052     _In_ ULONG cjIn,
03053     _In_reads_bytes_(cjIn) PVOID pvIn);
03054 typedef FN_DrvDrawEscape *PFN_DrvDrawEscape;
03055 extern FN_DrvDrawEscape DrvDrawEscape;
03056 
03057 typedef BOOL
03058 (APIENTRY FN_DrvEnableDriver)(
03059     _In_ ULONG iEngineVersion,
03060     _In_ ULONG cj,
03061     _Inout_bytecount_(cj) DRVENABLEDATA *pded); // Zero initialized
03062 typedef FN_DrvEnableDriver *PFN_DrvEnableDriver;
03063 extern FN_DrvEnableDriver DrvEnableDriver;
03064 
03065 typedef DHPDEV
03066 (APIENTRY FN_DrvEnablePDEV)(
03067     _In_ DEVMODEW *pdm,
03068     _In_ LPWSTR pwszLogAddress,
03069     _In_ ULONG cPat,
03070     _Out_opt_cap_(cPat) HSURF *phsurfPatterns,
03071     _In_ ULONG cjCaps,
03072     _Out_bytecap_(cjCaps) ULONG *pdevcaps,
03073     _In_ ULONG cjDevInfo,
03074     _Out_ DEVINFO *pdi,
03075     _In_ HDEV hdev,
03076     _In_ LPWSTR pwszDeviceName,
03077     _In_ HANDLE hDriver);
03078 typedef FN_DrvEnablePDEV *PFN_DrvEnablePDEV;
03079 extern FN_DrvEnablePDEV DrvEnablePDEV;
03080 
03081 typedef HSURF
03082 (APIENTRY FN_DrvEnableSurface)(
03083     _In_ DHPDEV dhpdev);
03084 typedef FN_DrvEnableSurface *PFN_DrvEnableSurface;
03085 extern FN_DrvEnableSurface DrvEnableSurface;
03086 
03087 /* DrvEndDoc.fl constants */
03088 #define ED_ABORTDOC                       0x00000001
03089 
03090 typedef BOOL
03091 (APIENTRY FN_DrvEndDoc)(
03092     _In_ SURFOBJ *pso,
03093     _In_ FLONG fl);
03094 typedef FN_DrvEndDoc *PFN_DrvEndDoc;
03095 extern FN_DrvEndDoc DrvEndDoc;
03096 
03097 typedef ULONG
03098 (APIENTRY FN_DrvEscape)(
03099     _In_ SURFOBJ *pso,
03100     _In_ ULONG iEsc,
03101     _In_ ULONG cjIn,
03102     _In_bytecount_(cjIn) PVOID pvIn,
03103     _In_ ULONG cjOut,
03104     _Out_bytecap_(cjOut) PVOID pvOut);
03105 typedef FN_DrvEscape *PFN_DrvEscape;
03106 extern FN_DrvEscape DrvEscape;
03107 
03108 typedef BOOL
03109 (APIENTRY FN_DrvFillPath)(
03110     _Inout_ SURFOBJ *pso,
03111     _In_ PATHOBJ *ppo,
03112     _In_ CLIPOBJ *pco,
03113     _In_ BRUSHOBJ *pbo,
03114     _In_ POINTL *pptlBrushOrg,
03115     _In_ MIX mix,
03116     _In_ FLONG flOptions);
03117 typedef FN_DrvFillPath *PFN_DrvFillPath;
03118 extern FN_DrvFillPath DrvFillPath;
03119 
03120 typedef ULONG
03121 (APIENTRY FN_DrvFontManagement)(
03122     _In_ SURFOBJ  *pso,
03123     _In_opt_ FONTOBJ  *pfo,
03124     _In_ ULONG  iMode,
03125     _In_ ULONG  cjIn,
03126     _In_bytecount_(cjIn) PVOID  pvIn,
03127     _In_ ULONG  cjOut,
03128     _Out_bytecap_(cjOut) PVOID  pvOut);
03129 typedef FN_DrvFontManagement *PFN_DrvFontManagement;
03130 extern FN_DrvFontManagement DrvFontManagement;
03131 
03132 typedef VOID
03133 (APIENTRY FN_DrvFree)(
03134     _In_ _Post_ptr_invalid_ PVOID pv,
03135     _In_ ULONG_PTR id);
03136 typedef FN_DrvFree *PFN_DrvFree;
03137 extern FN_DrvFree DrvFree;
03138 
03139 /* DrvGetGlyphMode return values */
03140 #define FO_HGLYPHS                        0L
03141 #define FO_GLYPHBITS                      1L
03142 #define FO_PATHOBJ                        2L
03143 
03144 typedef ULONG
03145 (APIENTRY FN_DrvGetGlyphMode)(
03146     _In_ DHPDEV dhpdev,
03147     _In_ FONTOBJ *pfo);
03148 typedef FN_DrvGetGlyphMode *PFN_DrvGetGlyphMode;
03149 extern FN_DrvGetGlyphMode DrvGetGlyphMode;
03150 
03151 typedef ULONG
03152 (APIENTRY FN_DrvGetModes)(
03153     _In_ HANDLE hDriver,
03154     _In_ ULONG cjSize,
03155     _Out_opt_bytecap_(cjSize) DEVMODEW *pdm);
03156 typedef FN_DrvGetModes *PFN_DrvGetModes;
03157 extern FN_DrvGetModes DrvGetModes;
03158 
03159 typedef PVOID
03160 (APIENTRY FN_DrvGetTrueTypeFile)(
03161     _In_ ULONG_PTR iFile,
03162     _In_ ULONG *pcj);
03163 typedef FN_DrvGetTrueTypeFile *PFN_DrvGetTrueTypeFile;
03164 extern FN_DrvGetTrueTypeFile DrvGetTrueTypeFile;
03165 
03166 typedef BOOL
03167 (APIENTRY FN_DrvGradientFill)(
03168     _Inout_ SURFOBJ *psoDest,
03169     _In_ CLIPOBJ *pco,
03170     _In_opt_ XLATEOBJ *pxlo,
03171     _In_ TRIVERTEX *pVertex,
03172     _In_ ULONG nVertex,
03173     _In_ PVOID pMesh,
03174     _In_ ULONG nMesh,
03175     _In_ RECTL *prclExtents,
03176     _In_ POINTL *pptlDitherOrg,
03177     _In_ ULONG ulMode);
03178 typedef FN_DrvGradientFill *PFN_DrvGradientFill;
03179 extern FN_DrvGradientFill DrvGradientFill;
03180 
03181 typedef BOOL
03182 (APIENTRY FN_DrvIcmCheckBitmapBits)(
03183     _In_ DHPDEV dhpdev,
03184     _In_ HANDLE hColorTransform,
03185     _In_ SURFOBJ *pso,
03186     _Out_bytecap_(pso->sizlBitmap.cx * pso->sizlBitmap.cy) PBYTE paResults);
03187 typedef FN_DrvIcmCheckBitmapBits *PFN_DrvIcmCheckBitmapBits;
03188 extern FN_DrvIcmCheckBitmapBits DrvIcmCheckBitmapBits;
03189 
03190 typedef HANDLE
03191 (APIENTRY FN_DrvIcmCreateColorTransform)(
03192     _In_ DHPDEV dhpdev,
03193     _In_ LPLOGCOLORSPACEW pLogColorSpace,
03194     _In_reads_bytes_opt_(cjSourceProfile) PVOID pvSourceProfile,
03195     _In_ ULONG cjSourceProfile,
03196     _In_reads_bytes_(cjDestProfile) PVOID pvDestProfile,
03197     _In_ ULONG cjDestProfile,
03198     _In_reads_bytes_opt_(cjTargetProfile) PVOID pvTargetProfile,
03199     _In_ ULONG cjTargetProfile,
03200     _In_ DWORD dwReserved);
03201 typedef FN_DrvIcmCreateColorTransform *PFN_DrvIcmCreateColorTransform;
03202 extern FN_DrvIcmCreateColorTransform DrvIcmCreateColorTransform;
03203 
03204 typedef BOOL
03205 (APIENTRY FN_DrvIcmDeleteColorTransform)(
03206     _In_ DHPDEV dhpdev,
03207     _In_ HANDLE hcmXform);
03208 typedef FN_DrvIcmDeleteColorTransform *PFN_DrvIcmDeleteColorTransform;
03209 extern FN_DrvIcmDeleteColorTransform DrvIcmDeleteColorTransform;
03210 
03211 /* DrvIcmSetDeviceGammaRamp.iFormat constants */
03212 #define IGRF_RGB_256BYTES                 0x00000000
03213 #define IGRF_RGB_256WORDS                 0x00000001
03214 
03215 typedef BOOL
03216 (APIENTRY FN_DrvIcmSetDeviceGammaRamp)(
03217     _In_ DHPDEV dhpdev,
03218     _In_ ULONG iFormat,
03219     _In_bytecount_(sizeof(GAMMARAMP)) LPVOID lpRamp);
03220 typedef FN_DrvIcmSetDeviceGammaRamp *PFN_DrvIcmSetDeviceGammaRamp;
03221 extern FN_DrvIcmSetDeviceGammaRamp DrvIcmSetDeviceGammaRamp;
03222 
03223 typedef BOOL
03224 (APIENTRY FN_DrvLineTo)(
03225     _Inout_ SURFOBJ *pso,
03226     _In_ CLIPOBJ *pco,
03227     _In_ BRUSHOBJ *pbo,
03228     _In_ LONG x1,
03229     _In_ LONG y1,
03230     _In_ LONG x2,
03231     _In_ LONG y2,
03232     _In_opt_ RECTL *prclBounds,
03233     _In_ MIX mix);
03234 typedef FN_DrvLineTo *PFN_DrvLineTo;
03235 extern FN_DrvLineTo DrvLineTo;
03236 
03237 typedef ULONG_PTR
03238 (APIENTRY FN_DrvLoadFontFile)(
03239     _In_ ULONG cFiles,
03240     _In_ ULONG_PTR *piFile,
03241     _In_count_(cFiles) PVOID *ppvView,
03242     _In_count_(cFiles) ULONG *pcjView,
03243     _In_opt_ DESIGNVECTOR *pdv,
03244     _In_ ULONG ulLangID,
03245     _In_ ULONG ulFastCheckSum);
03246 typedef FN_DrvLoadFontFile *PFN_DrvLoadFontFile;
03247 extern FN_DrvLoadFontFile DrvLoadFontFile;
03248 
03249 typedef VOID
03250 (APIENTRY FN_DrvMovePointer)(
03251     _In_ SURFOBJ *pso,
03252     _In_ LONG x,
03253     _In_ LONG y,
03254     _In_opt_ RECTL *prcl);
03255 typedef FN_DrvMovePointer *PFN_DrvMovePointer;
03256 extern FN_DrvMovePointer DrvMovePointer;
03257 
03258 typedef BOOL
03259 (APIENTRY FN_DrvNextBand)(
03260     _In_ SURFOBJ *pso,
03261     _In_ POINTL *pptl);
03262 typedef FN_DrvNextBand *PFN_DrvNextBand;
03263 extern FN_DrvNextBand DrvNextBand;
03264 
03265 typedef VOID
03266 (APIENTRY FN_DrvNotify)(
03267     _In_ SURFOBJ *pso,
03268     _In_ ULONG iType,
03269     _In_opt_ PVOID pvData);
03270 typedef FN_DrvNotify *PFN_DrvNotify;
03271 extern FN_DrvNotify DrvNotify;
03272 
03273 typedef BOOL
03274 (APIENTRY FN_DrvOffset)(
03275     _In_ SURFOBJ *pso,
03276     _In_ LONG x,
03277     _In_ LONG y,
03278     _In_ FLONG flReserved);
03279 typedef FN_DrvOffset *PFN_DrvOffset;
03280 extern FN_DrvOffset DrvOffset;
03281 
03282 typedef BOOL
03283 (APIENTRY FN_DrvPaint)(
03284     _Inout_ SURFOBJ *pso,
03285     _In_ CLIPOBJ *pco,
03286     _In_ BRUSHOBJ *pbo,
03287     _In_ POINTL *pptlBrushOrg,
03288     _In_ MIX mix);
03289 typedef FN_DrvPaint *PFN_DrvPaint;
03290 extern FN_DrvPaint DrvPaint;
03291 
03292 typedef BOOL
03293 (APIENTRY FN_DrvPlgBlt)(
03294     _Inout_ SURFOBJ *psoTrg,
03295     _Inout_ SURFOBJ *psoSrc,
03296     _In_opt_ SURFOBJ *psoMsk,
03297     _In_ CLIPOBJ *pco,
03298     _In_opt_ XLATEOBJ *pxlo,
03299     _In_opt_ COLORADJUSTMENT *pca,
03300     _In_opt_ POINTL *pptlBrushOrg,
03301     _In_ POINTFIX *pptfx,
03302     _In_ RECTL *prcl,
03303     _In_opt_ POINTL *pptl,
03304     _In_ ULONG iMode);
03305 typedef FN_DrvPlgBlt *PFN_DrvPlgBlt;
03306 extern FN_DrvPlgBlt DrvPlgBlt;
03307 
03308 /* DrvQueryAdvanceWidths.iMode constants */
03309 #define QAW_GETWIDTHS                     0
03310 #define QAW_GETEASYWIDTHS                 1
03311 
03312 typedef BOOL
03313 (APIENTRY FN_DrvQueryAdvanceWidths)(
03314     _In_ DHPDEV dhpdev,
03315     _In_ FONTOBJ *pfo,
03316     _In_ ULONG iMode,
03317     _In_reads_(cGlyphs) HGLYPH *phg,
03318     _Out_writes_bytes_(cGlyphs * sizeof(USHORT)) PVOID pvWidths,
03319     _In_ ULONG cGlyphs);
03320 typedef FN_DrvQueryAdvanceWidths *PFN_DrvQueryAdvanceWidths;
03321 extern FN_DrvQueryAdvanceWidths DrvQueryAdvanceWidths;
03322 
03323 /* DrvQueryDeviceSupport.iType constants */
03324 #define QDS_CHECKJPEGFORMAT               0x00000000
03325 #define QDS_CHECKPNGFORMAT                0x00000001
03326 
03327 typedef BOOL
03328 (APIENTRY FN_DrvQueryDeviceSupport)(
03329     _In_ SURFOBJ *pso,
03330     _In_ XLATEOBJ *pxlo,
03331     _In_ XFORMOBJ *pxo,
03332     _In_ ULONG iType,
03333     _In_ ULONG cjIn,
03334     _In_bytecount_(cjIn) PVOID pvIn,
03335     _In_ ULONG cjOut,
03336     _Out_bytecap_(cjOut) PVOID pvOut);
03337 typedef FN_DrvQueryDeviceSupport *PFN_DrvQueryDeviceSupport;
03338 extern FN_DrvQueryDeviceSupport DrvQueryDeviceSupport;
03339 
03340 /* DrvQueryDriverInfo.dwMode constants */
03341 #define DRVQUERY_USERMODE                 0x00000001
03342 
03343 typedef BOOL
03344 (APIENTRY FN_DrvQueryDriverInfo)(
03345     _In_ DWORD dwMode,
03346     _Out_bytecap_(cjBuf) PVOID pBuffer,
03347     _In_ DWORD cjBuf,
03348     _Out_ PDWORD pcbNeeded);
03349 typedef FN_DrvQueryDriverInfo *PFN_DrvQueryDriverInfo;
03350 extern FN_DrvQueryDriverInfo DrvQueryDriverInfo;
03351 
03352 typedef PIFIMETRICS
03353 (APIENTRY FN_DrvQueryFont)(
03354     _In_ DHPDEV dhpdev,
03355     _In_ ULONG_PTR iFile,
03356     _In_ ULONG iFace,
03357     _Out_ ULONG_PTR *pid);
03358 typedef FN_DrvQueryFont *PFN_DrvQueryFont;
03359 extern FN_DrvQueryFont DrvQueryFont;
03360 
03361 /* DrvQueryFontCaps.pulCaps constants */
03362 #define QC_OUTLINES                       0x00000001
03363 #define QC_1BIT                           0x00000002
03364 #define QC_4BIT                           0x00000004
03365 
03366 #define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
03367 
03368 typedef LONG
03369 (APIENTRY FN_DrvQueryFontCaps)(
03370     _In_ ULONG culCaps,
03371     _Out_cap_(culCaps) ULONG *pulCaps);
03372 typedef FN_DrvQueryFontCaps *PFN_DrvQueryFontCaps;
03373 extern FN_DrvQueryFontCaps DrvQueryFontCaps;
03374 
03375 /* DrvQueryFontData.iMode constants */
03376 #define QFD_GLYPHANDBITMAP                1L
03377 #define QFD_GLYPHANDOUTLINE               2L
03378 #define QFD_MAXEXTENTS                    3L
03379 #define QFD_TT_GLYPHANDBITMAP             4L
03380 #define QFD_TT_GRAY1_BITMAP               5L
03381 #define QFD_TT_GRAY2_BITMAP               6L
03382 #define QFD_TT_GRAY4_BITMAP               8L
03383 #define QFD_TT_GRAY8_BITMAP               9L
03384 
03385 #define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
03386 
03387 typedef LONG
03388 (APIENTRY FN_DrvQueryFontData)(
03389     _In_ DHPDEV dhpdev,
03390     _In_ FONTOBJ *pfo,
03391     _In_ ULONG iMode,
03392     _In_ HGLYPH hg,
03393     _In_opt_ GLYPHDATA *pgd,
03394     _Out_bytecap_(cjSize) PVOID pv,
03395     _In_ ULONG cjSize);
03396 typedef FN_DrvQueryFontData *PFN_DrvQueryFontData;
03397 extern FN_DrvQueryFontData DrvQueryFontData;
03398 
03399 /* DrvQueryFontFile.ulMode constants */
03400 #define QFF_DESCRIPTION                   0x00000001
03401 #define QFF_NUMFACES                      0x00000002
03402 
03403 typedef LONG
03404 (APIENTRY FN_DrvQueryFontFile)(
03405     _In_ ULONG_PTR iFile,
03406     _In_ ULONG ulMode,
03407     _In_ ULONG cjBuf,
03408     _Out_bytecap_(cjBuf) ULONG *pulBuf);
03409 typedef FN_DrvQueryFontFile *PFN_DrvQueryFontFile;
03410 extern FN_DrvQueryFontFile DrvQueryFontFile;
03411 
03412 /* DrvQueryFontTree.iMode constants */
03413 #define QFT_UNICODE                       0L
03414 #define QFT_LIGATURES                     1L
03415 #define QFT_KERNPAIRS                     2L
03416 #define QFT_GLYPHSET                      3L
03417 
03418 typedef PVOID
03419 (APIENTRY FN_DrvQueryFontTree)(
03420     _In_ DHPDEV dhpdev,
03421     _In_ ULONG_PTR iFile,
03422     _In_ ULONG iFace,
03423     _In_ ULONG iMode,
03424     _Out_ ULONG_PTR *pid);
03425 typedef FN_DrvQueryFontTree *PFN_DrvQueryFontTree;
03426 extern FN_DrvQueryFontTree DrvQueryFontTree;
03427 
03428 typedef PFD_GLYPHATTR
03429 (APIENTRY FN_DrvQueryGlyphAttrs)(
03430     _In_ FONTOBJ *pfo,
03431     _In_ ULONG iMode);
03432 typedef FN_DrvQueryGlyphAttrs *PFN_DrvQueryGlyphAttrs;
03433 extern FN_DrvQueryGlyphAttrs DrvQueryGlyphAttrs;
03434 
03435 typedef ULONG
03436 (APIENTRY FN_DrvQueryPerBandInfo)(
03437     _In_ SURFOBJ *pso,
03438     _Inout_ PERBANDINFO *pbi);
03439 typedef FN_DrvQueryPerBandInfo *PFN_DrvQueryPerBandInfo;
03440 extern FN_DrvQueryPerBandInfo DrvQueryPerBandInfo;
03441 
03442 /* DrvQueryTrueTypeOutline.bMetricsOnly constants */
03443 #define TTO_METRICS_ONLY                  0x00000001
03444 #define TTO_QUBICS                        0x00000002
03445 #define TTO_UNHINTED                      0x00000004
03446 
03447 typedef LONG
03448 (APIENTRY FN_DrvQueryTrueTypeOutline)(
03449     _In_ DHPDEV dhpdev,
03450     _In_ FONTOBJ *pfo,
03451     _In_ HGLYPH hglyph,
03452     _In_ BOOL bMetricsOnly,
03453     _Out_opt_ GLYPHDATA *pgldt,
03454     _In_ ULONG cjBuf,
03455     _Out_bytecap_(cjBuf) TTPOLYGONHEADER *ppoly);
03456 typedef FN_DrvQueryTrueTypeOutline *PFN_DrvQueryTrueTypeOutline;
03457 extern FN_DrvQueryTrueTypeOutline DrvQueryTrueTypeOutline;
03458 
03459 typedef LONG
03460 (APIENTRY FN_DrvQueryTrueTypeTable)(
03461     _In_ ULONG_PTR iFile,
03462     _In_ ULONG ulFont,
03463     _In_ ULONG ulTag,
03464     _In_ PTRDIFF dpStart,
03465     _In_ ULONG cjBuf,
03466     _Out_opt_bytecap_(cjBuf) BYTE *pjBuf,
03467     _Outptr_opt_result_bytebuffer_all_maybenull_(*pcjTable) PBYTE *ppjTable,
03468     _Out_opt_ ULONG *pcjTable);
03469 typedef FN_DrvQueryTrueTypeTable *PFN_DrvQueryTrueTypeTable;
03470 extern FN_DrvQueryTrueTypeTable DrvQueryTrueTypeTable;
03471 
03472 /* DrvRealizeBrush.iHatch constants */
03473 #define RB_DITHERCOLOR                    0x80000000L
03474 
03475 #define HS_DDI_MAX                        6
03476 
03477 typedef BOOL
03478 (APIENTRY FN_DrvRealizeBrush)(
03479     _In_ BRUSHOBJ *pbo,
03480     _Inout_ SURFOBJ *psoTarget, // CHECKME
03481     _In_opt_ SURFOBJ *psoPattern,
03482     _In_opt_ SURFOBJ *psoMask,
03483     _In_opt_ XLATEOBJ *pxlo,
03484     _In_ ULONG iHatch);
03485 typedef FN_DrvRealizeBrush *PFN_DrvRealizeBrush;
03486 extern FN_DrvRealizeBrush DrvRealizeBrush;
03487 
03488 /* DrvResetDevice return values */
03489 #define DRD_SUCCESS                       0
03490 #define DRD_ERROR                         1
03491 
03492 typedef ULONG
03493 (APIENTRY FN_DrvResetDevice)(
03494     _In_ DHPDEV dhpdev,
03495     _Reserved_ PVOID Reserved);
03496 typedef FN_DrvResetDevice *PFN_DrvResetDevice;
03497 extern FN_DrvResetDevice DrvResetDevice;
03498 
03499 typedef BOOL
03500 (APIENTRY FN_DrvResetPDEV)(
03501     _In_ DHPDEV dhpdevOld,
03502     _In_ DHPDEV dhpdevNew);
03503 typedef FN_DrvResetPDEV *PFN_DrvResetPDEV;
03504 extern FN_DrvResetPDEV DrvResetPDEV;
03505 
03506 /* DrvSaveScreenBits.iMode constants */
03507 #define SS_SAVE                           0x00000000
03508 #define SS_RESTORE                        0x00000001
03509 #define SS_FREE                           0x00000002
03510 
03511 typedef ULONG_PTR
03512 (APIENTRY FN_DrvSaveScreenBits)(
03513     _In_ SURFOBJ *pso,
03514     _In_ ULONG iMode,
03515     _In_ ULONG_PTR ident,
03516     _In_ RECTL *prcl);
03517 typedef FN_DrvSaveScreenBits *PFN_DrvSaveScreenBits;
03518 extern FN_DrvSaveScreenBits DrvSaveScreenBits;
03519 
03520 typedef BOOL
03521 (APIENTRY FN_DrvSendPage)(
03522     _In_ SURFOBJ *pso);
03523 typedef FN_DrvSendPage *PFN_DrvSendPage;
03524 extern FN_DrvSendPage DrvSendPage;
03525 
03526 /* DrvSetPalette range */
03527 #define WINDDI_MAXSETPALETTECOLORS     256
03528 #define WINDDI_MAXSETPALETTECOLORINDEX 255
03529 
03530 typedef BOOL
03531 (APIENTRY FN_DrvSetPalette)(
03532     _In_ DHPDEV dhpdev,
03533     _In_ PALOBJ *ppalo,
03534     _In_ FLONG fl,
03535     _In_range_(0, WINDDI_MAXSETPALETTECOLORINDEX) ULONG iStart,
03536     _In_range_(0, WINDDI_MAXSETPALETTECOLORS - iStart) ULONG cColors);
03537 typedef FN_DrvSetPalette *PFN_DrvSetPalette;
03538 extern FN_DrvSetPalette DrvSetPalette;
03539 
03540 typedef BOOL
03541 (APIENTRY FN_DrvSetPixelFormat)(
03542     _In_ SURFOBJ *pso,
03543     _In_ LONG iPixelFormat,
03544     _In_ HWND hwnd);
03545 typedef FN_DrvSetPixelFormat *PFN_DrvSetPixelFormat;
03546 extern FN_DrvSetPixelFormat DrvSetPixelFormat;
03547 
03548 /* DrvSetPointerShape return values */
03549 #define SPS_ERROR                         0x00000000
03550 #define SPS_DECLINE                       0x00000001
03551 #define SPS_ACCEPT_NOEXCLUDE              0x00000002
03552 #define SPS_ACCEPT_EXCLUDE                0x00000003
03553 #define SPS_ACCEPT_SYNCHRONOUS            0x00000004
03554 
03555 /* DrvSetPointerShape.fl constants */
03556 #define SPS_CHANGE                        0x00000001L
03557 #define SPS_ASYNCCHANGE                   0x00000002L
03558 #define SPS_ANIMATESTART                  0x00000004L
03559 #define SPS_ANIMATEUPDATE                 0x00000008L
03560 #define SPS_ALPHA                         0x00000010L
03561 #define SPS_LENGTHMASK                    0x00000F00L
03562 #define SPS_FREQMASK                      0x000FF000L
03563 
03564 typedef ULONG
03565 (APIENTRY FN_DrvSetPointerShape)(
03566     _In_ SURFOBJ *pso,
03567     _In_opt_ SURFOBJ *psoMask,
03568     _In_opt_ SURFOBJ *psoColor,
03569     _In_ XLATEOBJ *pxlo,
03570     _In_ LONG xHot,
03571     _In_ LONG yHot,
03572     _In_ LONG x,
03573     _In_ LONG y,
03574     _In_ RECTL *prcl,
03575     _In_ FLONG fl);
03576 typedef FN_DrvSetPointerShape *PFN_DrvSetPointerShape;
03577 extern FN_DrvSetPointerShape DrvSetPointerShape;
03578 
03579 typedef BOOL
03580 (APIENTRY FN_DrvStartBanding)(
03581     _In_ SURFOBJ *pso,
03582     _In_ POINTL *pptl);
03583 typedef FN_DrvStartBanding *PFN_DrvStartBanding;
03584 extern FN_DrvStartBanding DrvStartBanding;
03585 
03586 typedef BOOL
03587 (APIENTRY FN_DrvStartDoc)(
03588     _In_ SURFOBJ *pso,
03589     _In_ LPWSTR pwszDocName,
03590     _In_ DWORD dwJobId);
03591 typedef FN_DrvStartDoc *PFN_DrvStartDoc;
03592 extern FN_DrvStartDoc DrvStartDoc;
03593 
03594 typedef BOOL
03595 (APIENTRY FN_DrvStartPage)(
03596     _In_ SURFOBJ *pso);
03597 typedef FN_DrvStartPage *PFN_DrvStartPage;
03598 extern FN_DrvStartPage DrvStartPage;
03599 
03600 typedef BOOL
03601 (APIENTRY FN_DrvStretchBlt)(
03602     _Inout_ SURFOBJ *psoDest,
03603     _Inout_ SURFOBJ *psoSrc,
03604     _In_opt_ SURFOBJ *psoMask,
03605     _In_ CLIPOBJ *pco,
03606     _In_opt_ XLATEOBJ *pxlo,
03607     _In_opt_ COLORADJUSTMENT *pca,
03608     _In_ POINTL *pptlHTOrg,
03609     _In_ RECTL *prclDest,
03610     _In_ RECTL *prclSrc,
03611     _When_(psoMask, _In_) POINTL *pptlMask,
03612     _In_ ULONG iMode);
03613 typedef FN_DrvStretchBlt *PFN_DrvStretchBlt;
03614 extern FN_DrvStretchBlt DrvStretchBlt;
03615 
03616 typedef BOOL
03617 (APIENTRY FN_DrvStretchBltROP)(
03618     _Inout_ SURFOBJ *psoDest,
03619     _Inout_ SURFOBJ *psoSrc,
03620     _In_opt_ SURFOBJ *psoMask,
03621     _In_ CLIPOBJ *pco,
03622     _In_opt_ XLATEOBJ *pxlo,
03623     _In_opt_ COLORADJUSTMENT *pca,
03624     _In_ POINTL *pptlHTOrg,
03625     _In_ RECTL *prclDest,
03626     _In_ RECTL *prclSrc,
03627     _When_(psoMask, _In_) POINTL *pptlMask,
03628     _In_ ULONG iMode,
03629     _In_ BRUSHOBJ *pbo,
03630     _In_ DWORD rop4);
03631 typedef FN_DrvStretchBltROP *PFN_DrvStretchBltROP;
03632 extern FN_DrvStretchBltROP DrvStretchBltROP;
03633 
03634 typedef BOOL
03635 (APIENTRY FN_DrvStrokeAndFillPath)(
03636     _Inout_ SURFOBJ *pso,
03637     _Inout_ PATHOBJ *ppo,
03638     _In_ CLIPOBJ *pco,
03639     _In_opt_ XFORMOBJ *pxo,
03640     _In_ BRUSHOBJ *pboStroke,
03641     _In_ LINEATTRS *plineattrs,
03642     _In_ BRUSHOBJ *pboFill,
03643     _In_ POINTL *pptlBrushOrg,
03644     _In_ MIX mixFill,
03645     _In_ FLONG flOptions);
03646 typedef FN_DrvStrokeAndFillPath *PFN_DrvStrokeAndFillPath;
03647 extern FN_DrvStrokeAndFillPath DrvStrokeAndFillPath;
03648 
03649 typedef BOOL
03650 (APIENTRY FN_DrvStrokePath)(
03651     _Inout_ SURFOBJ *pso,
03652     _In_ PATHOBJ *ppo,
03653     _In_ CLIPOBJ *pco,
03654     _In_opt_ XFORMOBJ *pxo,
03655     _In_ BRUSHOBJ *pbo,
03656     _In_ POINTL *pptlBrushOrg,
03657     _In_ LINEATTRS *plineattrs,
03658     _In_ MIX mix);
03659 typedef FN_DrvStrokePath *PFN_DrvStrokePath;
03660 extern FN_DrvStrokePath DrvStrokePath;
03661 
03662 typedef BOOL
03663 (APIENTRY FN_DrvSwapBuffers)(
03664     _In_ SURFOBJ *pso,
03665     _In_ WNDOBJ *pwo);
03666 typedef FN_DrvSwapBuffers *PFN_DrvSwapBuffers;
03667 extern FN_DrvSwapBuffers DrvSwapBuffers;
03668 
03669 typedef VOID
03670 (APIENTRY FN_DrvSynchronize)(
03671     _In_ DHPDEV dhpdev,
03672     _In_count_c_(0) RECTL *prcl); // should be ignored
03673 typedef FN_DrvSynchronize *PFN_DrvSynchronize;
03674 extern FN_DrvSynchronize DrvSynchronize;
03675 
03676 /* DrvSynchronizeSurface.fl constants */
03677 #define DSS_TIMER_EVENT                   0x00000001
03678 #define DSS_FLUSH_EVENT                   0x00000002
03679 #define DSS_RESERVED                      0x00000004
03680 #define DSS_RESERVED1                     0x00000008
03681 
03682 typedef VOID
03683 (APIENTRY FN_DrvSynchronizeSurface)(
03684     _In_ SURFOBJ *pso,
03685     _In_opt_ RECTL *prcl,
03686     _In_ FLONG fl);
03687 typedef FN_DrvSynchronizeSurface *PFN_DrvSynchronizeSurface;
03688 extern FN_DrvSynchronizeSurface DrvSynchronizeSurface;
03689 
03690 typedef BOOL
03691 (APIENTRY FN_DrvTextOut)(
03692     _In_ SURFOBJ *pso,
03693     _In_ STROBJ *pstro,
03694     _In_ FONTOBJ *pfo,
03695     _In_ CLIPOBJ *pco,
03696     _Null_ RECTL *prclExtra,
03697     _In_opt_ RECTL *prclOpaque,
03698     _In_ BRUSHOBJ *pboFore,
03699     _In_ BRUSHOBJ *pboOpaque,
03700     _In_ POINTL *pptlOrg,
03701     _In_ MIX mix);
03702 typedef FN_DrvTextOut *PFN_DrvTextOut;
03703 extern FN_DrvTextOut DrvTextOut;
03704 
03705 typedef BOOL
03706 (APIENTRY FN_DrvTransparentBlt)(
03707     _Inout_ SURFOBJ *psoDst,
03708     _In_ SURFOBJ *psoSrc,
03709     _In_ CLIPOBJ *pco,
03710     _In_opt_ XLATEOBJ *pxlo,
03711     _In_ RECTL *prclDst,
03712     _In_ RECTL *prclSrc,
03713     _In_ ULONG iTransColor,
03714     _In_ ULONG ulReserved);
03715 typedef FN_DrvTransparentBlt *PFN_DrvTransparentBlt;
03716 extern FN_DrvTransparentBlt DrvTransparentBlt;
03717 
03718 typedef BOOL
03719 (APIENTRY FN_DrvUnloadFontFile)(
03720     _In_ ULONG_PTR iFile);
03721 typedef FN_DrvUnloadFontFile *PFN_DrvUnloadFontFile;
03722 extern FN_DrvUnloadFontFile DrvUnloadFontFile;
03723 
03724 /* Direct draw */
03725 
03726 typedef VOID
03727 (APIENTRY FN_DrvDisableDirectDraw)(
03728     _In_ DHPDEV dhpdev);
03729 typedef FN_DrvDisableDirectDraw *PFN_DrvDisableDirectDraw;
03730 extern FN_DrvDisableDirectDraw DrvDisableDirectDraw;
03731 
03732 typedef BOOL
03733 (APIENTRY FN_DrvEnableDirectDraw)(
03734     _In_ DHPDEV dhpdev,
03735     _Out_ DD_CALLBACKS *pCallBacks,
03736     _Out_ DD_SURFACECALLBACKS *pSurfaceCallBacks,
03737     _Out_ DD_PALETTECALLBACKS *pPaletteCallBacks);
03738 typedef FN_DrvEnableDirectDraw *PFN_DrvEnableDirectDraw;
03739 extern FN_DrvEnableDirectDraw DrvEnableDirectDraw;
03740 
03741 typedef BOOL
03742 (APIENTRY FN_DrvGetDirectDrawInfo)(
03743     _In_ DHPDEV dhpdev,
03744     _Out_ DD_HALINFO *pHalInfo,
03745     _Out_ DWORD *pdwNumHeaps,
03746     _Out_ VIDEOMEMORY *pvmList,
03747     _Out_ DWORD *pdwNumFourCCCodes,
03748     _Out_ DWORD *pdwFourCC);
03749 typedef FN_DrvGetDirectDrawInfo *PFN_DrvGetDirectDrawInfo;
03750 extern FN_DrvGetDirectDrawInfo DrvGetDirectDrawInfo;
03751 
03752 typedef BOOL //DECLSPEC_DEPRECATED_DDK
03753 (APIENTRY FN_DrvQuerySpoolType)(
03754     _In_ DHPDEV dhpdev,
03755     _In_ LPWSTR pwchType);
03756 typedef FN_DrvQuerySpoolType *PFN_DrvQuerySpoolType;
03757 extern FN_DrvQuerySpoolType DrvQuerySpoolType;
03758 
03759 
03760 #ifdef __cplusplus
03761 }
03762 #endif
03763 
03764 #endif /* defined __VIDEO_H__ */
03765 
03766 #endif /* _WINDDI_ */

Generated on Sun May 27 2012 04:32:39 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.