[FAST486]
[reactos.git] / include / psdk / winddi.h
1 /*
2 * winddi.h
3 *
4 * GDI device driver interface
5 *
6 * This file is part of the w32api package.
7 *
8 * Contributors:
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 * Annotations by Timo Kreuzer <timo.kreuzer@reactos.org>
11 *
12 * THIS SOFTWARE IS NOT COPYRIGHTED
13 *
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
16 *
17 * This code is distributed in the hope that it will be useful but
18 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
19 * DISCLAIMED. This includes but is not limited to warranties of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
21 *
22 */
23
24 #ifndef _WINDDI_
25 #define _WINDDI_
26 #pragma once
27
28 #ifdef __VIDEO_H__
29 #error video.h cannot be included with winddi.h
30 #else
31
32 #include <ddrawint.h>
33 #include <d3dnthal.h>
34 #include <specstrings.h>
35
36 #ifdef __cplusplus
37 extern "C" {
38 #endif
39
40 #ifndef DECLSPEC_IMPORT
41 #define DECLSPEC_IMPORT __attribute__((dllimport))
42 #endif
43
44 #if defined(_ENGINE_EXPORT_)
45 #define ENGAPI
46 #else
47 #define ENGAPI DECLSPEC_IMPORT
48 #endif
49
50 #define DDI_DRIVER_VERSION_NT4 0x00020000
51 #define DDI_DRIVER_VERSION_SP3 0x00020003
52 #define DDI_DRIVER_VERSION_NT5 0x00030000
53 #define DDI_DRIVER_VERSION_NT5_01 0x00030100
54 #define DDI_DRIVER_VERSION_NT5_01_SP1 0x00030101
55
56 #define GDI_DRIVER_VERSION 0x4000
57
58 #if defined(_X86_) && !defined(USERMODE_DRIVER) && !defined(BUILD_WOW6432)
59 typedef DWORD FLOATL;
60 #else
61 typedef FLOAT FLOATL;
62 #endif
63
64 typedef SHORT FWORD;
65 typedef LONG LDECI4;
66 typedef ULONG IDENT;
67
68 typedef ULONG_PTR HFF;
69 typedef ULONG_PTR HFC;
70
71 typedef LONG PTRDIFF;
72 typedef PTRDIFF *PPTRDIFF;
73 typedef LONG FIX;
74 typedef FIX *PFIX;
75 typedef ULONG ROP4;
76 typedef ULONG MIX;
77 typedef ULONG HGLYPH;
78 typedef HGLYPH *PHGLYPH;
79
80 typedef LONG_PTR (APIENTRY *PFN)();
81
82 DECLARE_HANDLE(HBM);
83 DECLARE_HANDLE(HDEV);
84 DECLARE_HANDLE(HSURF);
85 DECLARE_HANDLE(DHSURF);
86 DECLARE_HANDLE(DHPDEV);
87 DECLARE_HANDLE(HDRVOBJ);
88
89 #ifndef _NTDDVDEO_
90 typedef struct _ENG_EVENT *PEVENT;
91 #endif
92
93 #define OPENGL_CMD 4352
94 #define OPENGL_GETINFO 4353
95 #define WNDOBJ_SETUP 4354
96
97 #define FD_ERROR 0xFFFFFFFF
98 #define DDI_ERROR 0xFFFFFFFF
99
100 #define HFF_INVALID ((HFF) 0)
101 #define HFC_INVALID ((HFC) 0)
102 #define HGLYPH_INVALID ((HGLYPH) -1)
103
104 #define FP_ALTERNATEMODE 1
105 #define FP_WINDINGMODE 2
106
107 #define DN_ACCELERATION_LEVEL 1
108 #define DN_DEVICE_ORIGIN 2
109 #define DN_SLEEP_MODE 3
110 #define DN_DRAWING_BEGIN 4
111
112 #define DCR_SOLID 0
113 #define DCR_DRIVER 1
114 #define DCR_HALFTONE 2
115
116 #define GX_IDENTITY 0
117 #define GX_OFFSET 1
118 #define GX_SCALE 2
119 #define GX_GENERAL 3
120
121 #define LTOFX(x) ((x) << 4)
122 #define FXTOL(x) ((x) >> 4)
123 #define FXTOLFLOOR(x) ((x) >> 4)
124 #define FXTOLCEILING(x) ((x + 0x0F) >> 4)
125 #define FXTOLROUND(x) ((((x) >> 3) + 1) >> 1)
126
127 typedef struct _POINTE {
128 FLOATL x;
129 FLOATL y;
130 } POINTE, *PPOINTE;
131
132 typedef union _FLOAT_LONG {
133 FLOATL e;
134 LONG l;
135 } FLOAT_LONG, *PFLOAT_LONG;
136
137 typedef struct _POINTFIX {
138 FIX x;
139 FIX y;
140 } POINTFIX, *PPOINTFIX;
141
142 typedef struct _RECTFX {
143 FIX xLeft;
144 FIX yTop;
145 FIX xRight;
146 FIX yBottom;
147 } RECTFX, *PRECTFX;
148
149 typedef struct _POINTQF {
150 LARGE_INTEGER x;
151 LARGE_INTEGER y;
152 } POINTQF, *PPOINTQF;
153
154
155 typedef struct _BLENDOBJ {
156 BLENDFUNCTION BlendFunction;
157 } BLENDOBJ,*PBLENDOBJ;
158
159 /* BRUSHOBJ.flColorType */
160 #define BR_DEVICE_ICM 0x01
161 #define BR_HOST_ICM 0x02
162 #define BR_CMYKCOLOR 0x04
163 #define BR_ORIGCOLOR 0x08
164
165 typedef struct _BRUSHOBJ {
166 ULONG iSolidColor;
167 PVOID pvRbrush;
168 FLONG flColorType;
169 } BRUSHOBJ;
170
171 typedef struct _CIECHROMA {
172 LDECI4 x;
173 LDECI4 y;
174 LDECI4 Y;
175 } CIECHROMA;
176
177 typedef struct _RUN {
178 LONG iStart;
179 LONG iStop;
180 } RUN, *PRUN;
181
182 typedef struct _CLIPLINE {
183 POINTFIX ptfxA;
184 POINTFIX ptfxB;
185 LONG lStyleState;
186 ULONG c;
187 _Field_size_(c) RUN arun[1];
188 } CLIPLINE, *PCLIPLINE;
189
190 /* CLIPOBJ.iDComplexity constants */
191 #define DC_TRIVIAL 0
192 #define DC_RECT 1
193 #define DC_COMPLEX 3
194
195 /* CLIPOBJ.iFComplexity constants */
196 #define FC_RECT 1
197 #define FC_RECT4 2
198 #define FC_COMPLEX 3
199
200 /* CLIPOBJ.iMode constants */
201 #define TC_RECTANGLES 0
202 #define TC_PATHOBJ 2
203
204 /* CLIPOBJ.fjOptions constants */
205 #define OC_BANK_CLIP 1
206
207 typedef struct _CLIPOBJ {
208 ULONG iUniq;
209 RECTL rclBounds;
210 BYTE iDComplexity;
211 BYTE iFComplexity;
212 BYTE iMode;
213 BYTE fjOptions;
214 } CLIPOBJ;
215
216 typedef struct _COLORINFO {
217 CIECHROMA Red;
218 CIECHROMA Green;
219 CIECHROMA Blue;
220 CIECHROMA Cyan;
221 CIECHROMA Magenta;
222 CIECHROMA Yellow;
223 CIECHROMA AlignmentWhite;
224 LDECI4 RedGamma;
225 LDECI4 GreenGamma;
226 LDECI4 BlueGamma;
227 LDECI4 MagentaInCyanDye;
228 LDECI4 YellowInCyanDye;
229 LDECI4 CyanInMagentaDye;
230 LDECI4 YellowInMagentaDye;
231 LDECI4 CyanInYellowDye;
232 LDECI4 MagentaInYellowDye;
233 } COLORINFO, *PCOLORINFO;
234
235 /* DEVHTADJDATA.DeviceFlags constants */
236 #define DEVHTADJF_COLOR_DEVICE 0x00000001
237 #define DEVHTADJF_ADDITIVE_DEVICE 0x00000002
238
239 typedef struct _DEVHTINFO {
240 DWORD HTFlags;
241 DWORD HTPatternSize;
242 DWORD DevPelsDPI;
243 COLORINFO ColorInfo;
244 } DEVHTINFO, *PDEVHTINFO;
245
246 typedef struct _DEVHTADJDATA {
247 DWORD DeviceFlags;
248 DWORD DeviceXDPI;
249 DWORD DeviceYDPI;
250 PDEVHTINFO pDefHTInfo;
251 PDEVHTINFO pAdjHTInfo;
252 } DEVHTADJDATA, *PDEVHTADJDATA;
253
254 /* DEVINFO.flGraphicsCaps flags */
255 #define GCAPS_BEZIERS 0x00000001
256 #define GCAPS_GEOMETRICWIDE 0x00000002
257 #define GCAPS_ALTERNATEFILL 0x00000004
258 #define GCAPS_WINDINGFILL 0x00000008
259 #define GCAPS_HALFTONE 0x00000010
260 #define GCAPS_COLOR_DITHER 0x00000020
261 #define GCAPS_HORIZSTRIKE 0x00000040
262 #define GCAPS_VERTSTRIKE 0x00000080
263 #define GCAPS_OPAQUERECT 0x00000100
264 #define GCAPS_VECTORFONT 0x00000200
265 #define GCAPS_MONO_DITHER 0x00000400
266 #define GCAPS_ASYNCCHANGE 0x00000800
267 #define GCAPS_ASYNCMOVE 0x00001000
268 #define GCAPS_DONTJOURNAL 0x00002000
269 #define GCAPS_DIRECTDRAW 0x00004000
270 #define GCAPS_ARBRUSHOPAQUE 0x00008000
271 #define GCAPS_PANNING 0x00010000
272 #define GCAPS_HIGHRESTEXT 0x00040000
273 #define GCAPS_PALMANAGED 0x00080000
274 #define GCAPS_DITHERONREALIZE 0x00200000
275 #define GCAPS_NO64BITMEMACCESS 0x00400000
276 #define GCAPS_FORCEDITHER 0x00800000
277 #define GCAPS_GRAY16 0x01000000
278 #define GCAPS_ICM 0x02000000
279 #define GCAPS_CMYKCOLOR 0x04000000
280 #define GCAPS_LAYERED 0x08000000
281 #define GCAPS_ARBRUSHTEXT 0x10000000
282 #define GCAPS_SCREENPRECISION 0x20000000
283 #define GCAPS_FONT_RASTERIZER 0x40000000
284 #define GCAPS_NUP 0x80000000
285
286 /* DEVINFO.iDitherFormat constants */
287 #define BMF_1BPP 1L
288 #define BMF_4BPP 2L
289 #define BMF_8BPP 3L
290 #define BMF_16BPP 4L
291 #define BMF_24BPP 5L
292 #define BMF_32BPP 6L
293 #define BMF_4RLE 7L
294 #define BMF_8RLE 8L
295 #define BMF_JPEG 9L
296 #define BMF_PNG 10L
297
298 /* DEVINFO.flGraphicsCaps2 flags */
299 #define GCAPS2_JPEGSRC 0x00000001
300 #define GCAPS2_xxxx 0x00000002
301 #define GCAPS2_PNGSRC 0x00000008
302 #define GCAPS2_CHANGEGAMMARAMP 0x00000010
303 #define GCAPS2_ALPHACURSOR 0x00000020
304 #define GCAPS2_SYNCFLUSH 0x00000040
305 #define GCAPS2_SYNCTIMER 0x00000080
306 #define GCAPS2_ICD_MULTIMON 0x00000100
307 #define GCAPS2_MOUSETRAILS 0x00000200
308 #define GCAPS2_RESERVED1 0x00000400
309
310 typedef struct _DEVINFO {
311 FLONG flGraphicsCaps;
312 LOGFONTW lfDefaultFont;
313 LOGFONTW lfAnsiVarFont;
314 LOGFONTW lfAnsiFixFont;
315 ULONG cFonts;
316 ULONG iDitherFormat;
317 USHORT cxDither;
318 USHORT cyDither;
319 HPALETTE hpalDefault;
320 FLONG flGraphicsCaps2;
321 } DEVINFO, *PDEVINFO;
322
323 struct _DRIVEROBJ;
324
325 typedef BOOL
326 (APIENTRY CALLBACK *FREEOBJPROC)(
327 _In_ struct _DRIVEROBJ *pDriverObj);
328
329 typedef struct _DRIVEROBJ {
330 PVOID pvObj;
331 FREEOBJPROC pFreeProc;
332 HDEV hdev;
333 DHPDEV dhpdev;
334 } DRIVEROBJ;
335
336 /* DRVFN.iFunc constants */
337 #define INDEX_DrvEnablePDEV 0L
338 #define INDEX_DrvCompletePDEV 1L
339 #define INDEX_DrvDisablePDEV 2L
340 #define INDEX_DrvEnableSurface 3L
341 #define INDEX_DrvDisableSurface 4L
342 #define INDEX_DrvAssertMode 5L
343 #define INDEX_DrvOffset 6L
344 #define INDEX_DrvResetPDEV 7L
345 #define INDEX_DrvDisableDriver 8L
346 #define INDEX_DrvUnknown1 9L
347 #define INDEX_DrvCreateDeviceBitmap 10L
348 #define INDEX_DrvDeleteDeviceBitmap 11L
349 #define INDEX_DrvRealizeBrush 12L
350 #define INDEX_DrvDitherColor 13L
351 #define INDEX_DrvStrokePath 14L
352 #define INDEX_DrvFillPath 15L
353 #define INDEX_DrvStrokeAndFillPath 16L
354 #define INDEX_DrvPaint 17L
355 #define INDEX_DrvBitBlt 18L
356 #define INDEX_DrvCopyBits 19L
357 #define INDEX_DrvStretchBlt 20L
358 #define INDEX_DrvUnknown2 21L
359 #define INDEX_DrvSetPalette 22L
360 #define INDEX_DrvTextOut 23L
361 #define INDEX_DrvEscape 24L
362 #define INDEX_DrvDrawEscape 25L
363 #define INDEX_DrvQueryFont 26L
364 #define INDEX_DrvQueryFontTree 27L
365 #define INDEX_DrvQueryFontData 28L
366 #define INDEX_DrvSetPointerShape 29L
367 #define INDEX_DrvMovePointer 30L
368 #define INDEX_DrvLineTo 31L
369 #define INDEX_DrvSendPage 32L
370 #define INDEX_DrvStartPage 33L
371 #define INDEX_DrvEndDoc 34L
372 #define INDEX_DrvStartDoc 35L
373 #define INDEX_DrvUnknown3 36L
374 #define INDEX_DrvGetGlyphMode 37L
375 #define INDEX_DrvSynchronize 38L
376 #define INDEX_DrvUnknown4 39L
377 #define INDEX_DrvSaveScreenBits 40L
378 #define INDEX_DrvGetModes 41L
379 #define INDEX_DrvFree 42L
380 #define INDEX_DrvDestroyFont 43L
381 #define INDEX_DrvQueryFontCaps 44L
382 #define INDEX_DrvLoadFontFile 45L
383 #define INDEX_DrvUnloadFontFile 46L
384 #define INDEX_DrvFontManagement 47L
385 #define INDEX_DrvQueryTrueTypeTable 48L
386 #define INDEX_DrvQueryTrueTypeOutline 49L
387 #define INDEX_DrvGetTrueTypeFile 50L
388 #define INDEX_DrvQueryFontFile 51L
389 #define INDEX_DrvMovePanning 52L
390 #define INDEX_DrvQueryAdvanceWidths 53L
391 #define INDEX_DrvSetPixelFormat 54L
392 #define INDEX_DrvDescribePixelFormat 55L
393 #define INDEX_DrvSwapBuffers 56L
394 #define INDEX_DrvStartBanding 57L
395 #define INDEX_DrvNextBand 58L
396 #define INDEX_DrvGetDirectDrawInfo 59L
397 #define INDEX_DrvEnableDirectDraw 60L
398 #define INDEX_DrvDisableDirectDraw 61L
399 #define INDEX_DrvQuerySpoolType 62L
400 #define INDEX_DrvUnknown5 63L
401 #define INDEX_DrvIcmCreateColorTransform 64L
402 #define INDEX_DrvIcmDeleteColorTransform 65L
403 #define INDEX_DrvIcmCheckBitmapBits 66L
404 #define INDEX_DrvIcmSetDeviceGammaRamp 67L
405 #define INDEX_DrvGradientFill 68L
406 #define INDEX_DrvStretchBltROP 69L
407 #define INDEX_DrvPlgBlt 70L
408 #define INDEX_DrvAlphaBlend 71L
409 #define INDEX_DrvSynthesizeFont 72L
410 #define INDEX_DrvGetSynthesizedFontFiles 73L
411 #define INDEX_DrvTransparentBlt 74L
412 #define INDEX_DrvQueryPerBandInfo 75L
413 #define INDEX_DrvQueryDeviceSupport 76L
414 #define INDEX_DrvReserved1 77L
415 #define INDEX_DrvReserved2 78L
416 #define INDEX_DrvReserved3 79L
417 #define INDEX_DrvReserved4 80L
418 #define INDEX_DrvReserved5 81L
419 #define INDEX_DrvReserved6 82L
420 #define INDEX_DrvReserved7 83L
421 #define INDEX_DrvReserved8 84L
422 #define INDEX_DrvDeriveSurface 85L
423 #define INDEX_DrvQueryGlyphAttrs 86L
424 #define INDEX_DrvNotify 87L
425 #define INDEX_DrvSynchronizeSurface 88L
426 #define INDEX_DrvResetDevice 89L
427 #define INDEX_DrvReserved9 90L
428 #define INDEX_DrvReserved10 91L
429 #define INDEX_DrvReserved11 92L
430 #if (NTDDI_VERSION >= NTDDI_VISTA)
431 #define INDEX_DrvRenderHint 93L
432 #if (NTDDI_VERSION >= NTDDI_WIN7)
433 #define INDEX_DrvCreateDeviceBitmapEx 94L
434 #define INDEX_DrvDeleteDeviceBitmapEx 95L
435 #define INDEX_DrvAssociateSharedSurface 96L
436 #define INDEX_DrvSynchronizeRedirectionBitmaps 97L
437 #define INDEX_DrvAccumulateD3DDirtyRect 98L
438 #define INDEX_DrvStartDxInterop 99L
439 #define INDEX_DrvEndDxInterop 100L
440 #define INDEX_DrvLockDisplayArea 101L
441 #define INDEX_DrvUnlockDisplayArea 102L
442 #define INDEX_LAST 103L
443 #else /* (NTDDI_VERSION >= NTDDI_WIN7) */
444 #define INDEX_LAST 94L
445 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
446 #else /* (NTDDI_VERSION >= NTDDI_VISTA) */
447 #define INDEX_LAST 93L
448 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
449
450 typedef struct _DRVFN {
451 ULONG iFunc;
452 PFN pfn;
453 } DRVFN, *PDRVFN;
454
455 /* DRVENABLEDATA.iDriverVersion constants */
456 #define DDI_DRIVER_VERSION_NT4 0x00020000
457 #define DDI_DRIVER_VERSION_SP3 0x00020003
458 #define DDI_DRIVER_VERSION_NT5 0x00030000
459 #define DDI_DRIVER_VERSION_NT5_01 0x00030100
460 #define DDI_DRIVER_VERSION_NT5_01_SP1 0x00030101
461
462 typedef struct _DRVENABLEDATA {
463 ULONG iDriverVersion;
464 ULONG c;
465 DRVFN *pdrvfn;
466 } DRVENABLEDATA, *PDRVENABLEDATA;
467
468 DECLARE_HANDLE(HSEMAPHORE);
469
470 typedef struct {
471 DWORD nSize;
472 HDC hdc;
473 PBYTE pvEMF;
474 PBYTE pvCurrentRecord;
475 } EMFINFO, *PEMFINFO;
476
477 typedef struct _ENGSAFESEMAPHORE {
478 HSEMAPHORE hsem;
479 LONG lCount;
480 } ENGSAFESEMAPHORE;
481
482 typedef struct _ENG_TIME_FIELDS {
483 _Field_range_(1601,MAXUSHORT) USHORT usYear;
484 _Field_range_(1,12) USHORT usMonth;
485 _Field_range_(1,31) USHORT usDay;
486 _Field_range_(0,23) USHORT usHour;
487 _Field_range_(0,59) USHORT usMinute;
488 _Field_range_(0,59) USHORT usSecond;
489 _Field_range_(0,999) USHORT usMilliseconds;
490 _Field_range_(0,6) USHORT usWeekday; // 0 == Sunday
491 } ENG_TIME_FIELDS, *PENG_TIME_FIELDS;
492
493 typedef struct _ENUMRECTS {
494 ULONG c;
495 RECTL arcl[1];
496 } ENUMRECTS;
497
498 typedef struct _FD_XFORM {
499 FLOATL eXX;
500 FLOATL eXY;
501 FLOATL eYX;
502 FLOATL eYY;
503 } FD_XFORM, *PFD_XFORM;
504
505 /* FD_DEVICEMETRICS.flRealizedType constants */
506 #define FDM_TYPE_BM_SIDE_CONST 0x00000001
507 #define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE 0x00000002
508 #define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE 0x00000004
509 #define FDM_TYPE_ZERO_BEARINGS 0x00000008
510 #define FDM_TYPE_CONST_BEARINGS 0x00000010
511
512 typedef struct _FD_DEVICEMETRICS {
513 FLONG flRealizedType;
514 POINTE pteBase;
515 POINTE pteSide;
516 LONG lD;
517 FIX fxMaxAscender;
518 FIX fxMaxDescender;
519 POINTL ptlUnderline1;
520 POINTL ptlStrikeout;
521 POINTL ptlULThickness;
522 POINTL ptlSOThickness;
523 ULONG cxMax;
524 ULONG cyMax;
525 ULONG cjGlyphMax;
526 FD_XFORM fdxQuantized;
527 LONG lNonLinearExtLeading;
528 LONG lNonLinearIntLeading;
529 LONG lNonLinearMaxCharWidth;
530 LONG lNonLinearAvgCharWidth;
531 LONG lMinA;
532 LONG lMinC;
533 LONG lMinD;
534 LONG alReserved[1];
535 } FD_DEVICEMETRICS, *PFD_DEVICEMETRICS;
536
537 /* FD_GLYPHATTR.iMode constants */
538 #define FO_ATTR_MODE_ROTATE 1
539
540 typedef struct _FD_GLYPHATTR {
541 ULONG cjThis;
542 ULONG cGlyphs;
543 ULONG iMode;
544 _Field_size_((cGlyphs+7)/8) BYTE aGlyphAttr[1];
545 } FD_GLYPHATTR, *PFD_GLYPHATTR;
546
547 /* FD_GLYPHSET.flAccel */
548 #define GS_UNICODE_HANDLES 0x00000001
549 #define GS_8BIT_HANDLES 0x00000002
550 #define GS_16BIT_HANDLES 0x00000004
551
552 typedef struct _WCRUN {
553 WCHAR wcLow;
554 USHORT cGlyphs;
555 HGLYPH *phg;
556 } WCRUN, *PWCRUN;
557
558 typedef struct _FD_GLYPHSET {
559 ULONG cjThis;
560 FLONG flAccel;
561 ULONG cGlyphsSupported;
562 ULONG cRuns;
563 _Field_size_(cRuns) WCRUN awcrun[1];
564 } FD_GLYPHSET, *PFD_GLYPHSET;
565
566 typedef struct _FD_KERNINGPAIR {
567 WCHAR wcFirst;
568 WCHAR wcSecond;
569 FWORD fwdKern;
570 } FD_KERNINGPAIR;
571
572 #if defined(_X86_) && !defined(USERMODE_DRIVER)
573 typedef struct _FLOATOBJ
574 {
575 ULONG ul1;
576 ULONG ul2;
577 } FLOATOBJ, *PFLOATOBJ;
578 #else
579 typedef FLOAT FLOATOBJ, *PFLOATOBJ;
580 #endif
581
582 #ifndef USERMODE_DRIVER
583 typedef struct tagFLOATOBJ_XFORM {
584 FLOATOBJ eM11;
585 FLOATOBJ eM12;
586 FLOATOBJ eM21;
587 FLOATOBJ eM22;
588 FLOATOBJ eDx;
589 FLOATOBJ eDy;
590 } FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
591 #else
592 typedef XFORML FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM;
593 #endif
594
595 /* FONTDIFF.fsSelection */
596 #define FM_SEL_ITALIC 0x0001
597 #define FM_SEL_UNDERSCORE 0x0002
598 #define FM_SEL_NEGATIVE 0x0004
599 #define FM_SEL_OUTLINED 0x0008
600 #define FM_SEL_STRIKEOUT 0x0010
601 #define FM_SEL_BOLD 0x0020
602 #define FM_SEL_REGULAR 0x0040
603
604 typedef struct _FONTDIFF {
605 BYTE jReserved1;
606 BYTE jReserved2;
607 BYTE jReserved3;
608 BYTE bWeight;
609 USHORT usWinWeight;
610 FSHORT fsSelection;
611 FWORD fwdAveCharWidth;
612 FWORD fwdMaxCharInc;
613 POINTL ptlCaret;
614 } FONTDIFF;
615
616 typedef struct _FONTSIM {
617 PTRDIFF dpBold;
618 PTRDIFF dpItalic;
619 PTRDIFF dpBoldItalic;
620 } FONTSIM;
621
622 /* FONTINFO.flCaps constants */
623 #define FO_DEVICE_FONT 1L
624 #define FO_OUTLINE_CAPABLE 2L
625
626 typedef struct _FONTINFO {
627 ULONG cjThis;
628 FLONG flCaps;
629 ULONG cGlyphsSupported;
630 ULONG cjMaxGlyph1;
631 ULONG cjMaxGlyph4;
632 ULONG cjMaxGlyph8;
633 ULONG cjMaxGlyph32;
634 } FONTINFO, *PFONTINFO;
635
636 /* FONTOBJ.flFontType constants */
637 #define FO_TYPE_RASTER RASTER_FONTTYPE
638 #define FO_TYPE_DEVICE DEVICE_FONTTYPE
639 #define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE
640 #define FO_TYPE_OPENTYPE OPENTYPE_FONTTYPE
641
642 #define FO_SIM_BOLD 0x00002000
643 #define FO_SIM_ITALIC 0x00004000
644 #define FO_EM_HEIGHT 0x00008000
645 #define FO_GRAY16 0x00010000
646 #define FO_NOGRAY16 0x00020000
647 #define FO_NOHINTS 0x00040000
648 #define FO_NO_CHOICE 0x00080000
649 #define FO_CFF 0x00100000
650 #define FO_POSTSCRIPT 0x00200000
651 #define FO_MULTIPLEMASTER 0x00400000
652 #define FO_VERT_FACE 0x00800000
653 #define FO_DBCS_FONT 0X01000000
654 #define FO_NOCLEARTYPE 0x02000000
655 #define FO_CLEARTYPE_X 0x10000000
656 #define FO_CLEARTYPE_Y 0x20000000
657
658 typedef struct _FONTOBJ {
659 ULONG iUniq;
660 ULONG iFace;
661 ULONG cxMax;
662 FLONG flFontType;
663 ULONG_PTR iTTUniq;
664 ULONG_PTR iFile;
665 SIZE sizLogResPpi;
666 ULONG ulStyleSize;
667 PVOID pvConsumer;
668 PVOID pvProducer;
669 } FONTOBJ;
670
671 typedef struct _GAMMARAMP {
672 WORD Red[256];
673 WORD Green[256];
674 WORD Blue[256];
675 } GAMMARAMP, *PGAMMARAMP;
676
677 /* GDIINFO.ulPrimaryOrder constants */
678 #define PRIMARY_ORDER_ABC 0
679 #define PRIMARY_ORDER_ACB 1
680 #define PRIMARY_ORDER_BAC 2
681 #define PRIMARY_ORDER_BCA 3
682 #define PRIMARY_ORDER_CBA 4
683 #define PRIMARY_ORDER_CAB 5
684
685 /* GDIINFO.ulHTPatternSize constants */
686 #define HT_PATSIZE_2x2 0
687 #define HT_PATSIZE_2x2_M 1
688 #define HT_PATSIZE_4x4 2
689 #define HT_PATSIZE_4x4_M 3
690 #define HT_PATSIZE_6x6 4
691 #define HT_PATSIZE_6x6_M 5
692 #define HT_PATSIZE_8x8 6
693 #define HT_PATSIZE_8x8_M 7
694 #define HT_PATSIZE_10x10 8
695 #define HT_PATSIZE_10x10_M 9
696 #define HT_PATSIZE_12x12 10
697 #define HT_PATSIZE_12x12_M 11
698 #define HT_PATSIZE_14x14 12
699 #define HT_PATSIZE_14x14_M 13
700 #define HT_PATSIZE_16x16 14
701 #define HT_PATSIZE_16x16_M 15
702 #define HT_PATSIZE_SUPERCELL 16
703 #define HT_PATSIZE_SUPERCELL_M 17
704 #define HT_PATSIZE_USER 18
705 #define HT_PATSIZE_MAX_INDEX HT_PATSIZE_USER
706 #define HT_PATSIZE_DEFAULT HT_PATSIZE_SUPERCELL_M
707 #define HT_USERPAT_CX_MIN 4
708 #define HT_USERPAT_CX_MAX 256
709 #define HT_USERPAT_CY_MIN 4
710 #define HT_USERPAT_CY_MAX 256
711
712 /* GDIINFO.ulHTOutputFormat constants */
713 #define HT_FORMAT_1BPP 0
714 #define HT_FORMAT_4BPP 2
715 #define HT_FORMAT_4BPP_IRGB 3
716 #define HT_FORMAT_8BPP 4
717 #define HT_FORMAT_16BPP 5
718 #define HT_FORMAT_24BPP 6
719 #define HT_FORMAT_32BPP 7
720
721 /* GDIINFO.flHTFlags */
722 #define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001
723 #define HT_FLAG_HAS_BLACK_DYE 0x00000002
724 #define HT_FLAG_ADDITIVE_PRIMS 0x00000004
725 #define HT_FLAG_USE_8BPP_BITMASK 0x00000008
726 #define HT_FLAG_INK_HIGH_ABSORPTION 0x00000010
727 #define HT_FLAG_INK_ABSORPTION_INDICES 0x00000060
728 #define HT_FLAG_DO_DEVCLR_XFORM 0x00000080
729 #define HT_FLAG_OUTPUT_CMY 0x00000100
730 #define HT_FLAG_PRINT_DRAFT_MODE 0x00000200
731 #define HT_FLAG_INVERT_8BPP_BITMASK_IDX 0x00000400
732 #define HT_FLAG_8BPP_CMY332_MASK 0xFF000000
733
734 #define MAKE_CMYMASK_BYTE(c,m,y) ((BYTE)(((BYTE)(c) & 0x07) << 5) \
735 |(BYTE)(((BYTE)(m) & 0x07) << 2) \
736 |(BYTE)((BYTE)(y) & 0x03))
737
738 #define MAKE_CMY332_MASK(c,m,y) ((DWORD)(((DWORD)(c) & 0x07) << 29)\
739 |(DWORD)(((DWORD)(m) & 0x07) << 26)\
740 |(DWORD)(((DWORD)(y) & 0x03) << 24))
741
742 /* GDIINFO.flHTFlags constants */
743 #define HT_FLAG_INK_ABSORPTION_IDX0 0x00000000
744 #define HT_FLAG_INK_ABSORPTION_IDX1 0x00000020
745 #define HT_FLAG_INK_ABSORPTION_IDX2 0x00000040
746 #define HT_FLAG_INK_ABSORPTION_IDX3 0x00000060
747
748 #define HT_FLAG_HIGHEST_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
749 |HT_FLAG_INK_ABSORPTION_IDX3)
750 #define HT_FLAG_HIGHER_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
751 |HT_FLAG_INK_ABSORPTION_IDX2)
752 #define HT_FLAG_HIGH_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
753 |HT_FLAG_INK_ABSORPTION_IDX1)
754 #define HT_FLAG_NORMAL_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX0
755 #define HT_FLAG_LOW_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX1
756 #define HT_FLAG_LOWER_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX2
757 #define HT_FLAG_LOWEST_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX3
758
759 #define HT_BITMASKPALRGB (DWORD)'0BGR'
760 #define HT_SET_BITMASKPAL2RGB(pPal) (*((LPDWORD)(pPal)) = HT_BITMASKPALRGB)
761 #define HT_IS_BITMASKPALRGB(pPal) (*((LPDWORD)(pPal)) == (DWORD)0)
762
763 /* GDIINFO.ulPhysicalPixelCharacteristics constants */
764 #define PPC_DEFAULT 0x0
765 #define PPC_UNDEFINED 0x1
766 #define PPC_RGB_ORDER_VERTICAL_STRIPES 0x2
767 #define PPC_BGR_ORDER_VERTICAL_STRIPES 0x3
768 #define PPC_RGB_ORDER_HORIZONTAL_STRIPES 0x4
769 #define PPC_BGR_ORDER_HORIZONTAL_STRIPES 0x5
770
771 #define PPG_DEFAULT 0
772 #define PPG_SRGB 1
773
774 typedef struct _GDIINFO {
775 ULONG ulVersion;
776 ULONG ulTechnology;
777 ULONG ulHorzSize;
778 ULONG ulVertSize;
779 ULONG ulHorzRes;
780 ULONG ulVertRes;
781 ULONG cBitsPixel;
782 ULONG cPlanes;
783 ULONG ulNumColors;
784 ULONG flRaster;
785 ULONG ulLogPixelsX;
786 ULONG ulLogPixelsY;
787 ULONG flTextCaps;
788 ULONG ulDACRed;
789 ULONG ulDACGreen;
790 ULONG ulDACBlue;
791 ULONG ulAspectX;
792 ULONG ulAspectY;
793 ULONG ulAspectXY;
794 LONG xStyleStep;
795 LONG yStyleStep;
796 LONG denStyleStep;
797 POINTL ptlPhysOffset;
798 SIZEL szlPhysSize;
799 ULONG ulNumPalReg;
800 COLORINFO ciDevice;
801 ULONG ulDevicePelsDPI;
802 ULONG ulPrimaryOrder;
803 ULONG ulHTPatternSize;
804 ULONG ulHTOutputFormat;
805 ULONG flHTFlags;
806 ULONG ulVRefresh;
807 ULONG ulBltAlignment;
808 ULONG ulPanningHorzRes;
809 ULONG ulPanningVertRes;
810 ULONG xPanningAlignment;
811 ULONG yPanningAlignment;
812 ULONG cxHTPat;
813 ULONG cyHTPat;
814 LPBYTE pHTPatA;
815 LPBYTE pHTPatB;
816 LPBYTE pHTPatC;
817 ULONG flShadeBlend;
818 ULONG ulPhysicalPixelCharacteristics;
819 ULONG ulPhysicalPixelGamma;
820 } GDIINFO, *PGDIINFO;
821
822 /* PATHDATA.flags constants */
823 #define PD_BEGINSUBPATH 0x00000001
824 #define PD_ENDSUBPATH 0x00000002
825 #define PD_RESETSTYLE 0x00000004
826 #define PD_CLOSEFIGURE 0x00000008
827 #define PD_BEZIERS 0x00000010
828 #define PD_ALL (PD_BEGINSUBPATH \
829 |PD_ENDSUBPATH \
830 |PD_RESETSTYLE \
831 |PD_CLOSEFIGURE \
832 PD_BEZIERS)
833
834 typedef struct _PATHDATA {
835 FLONG flags;
836 ULONG count;
837 POINTFIX *pptfx;
838 } PATHDATA, *PPATHDATA;
839
840 /* PATHOBJ.fl constants */
841 #define PO_BEZIERS 0x00000001
842 #define PO_ELLIPSE 0x00000002
843 #define PO_ALL_INTEGERS 0x00000004
844 #define PO_ENUM_AS_INTEGERS 0x00000008
845
846 typedef struct _PATHOBJ {
847 FLONG fl;
848 ULONG cCurves;
849 } PATHOBJ;
850
851 typedef BYTE GAMMA_TABLES[2][256];
852
853 typedef struct _GLYPHBITS {
854 POINTL ptlOrigin;
855 SIZEL sizlBitmap;
856 BYTE aj[1];
857 } GLYPHBITS;
858
859 typedef union _GLYPHDEF {
860 GLYPHBITS *pgb;
861 PATHOBJ *ppo;
862 } GLYPHDEF;
863
864 typedef struct _GLYPHPOS {
865 HGLYPH hg;
866 GLYPHDEF *pgdf;
867 POINTL ptl;
868 } GLYPHPOS, *PGLYPHPOS;
869
870 typedef struct _GLYPHDATA {
871 GLYPHDEF gdf;
872 HGLYPH hg;
873 FIX fxD;
874 FIX fxA;
875 FIX fxAB;
876 FIX fxInkTop;
877 FIX fxInkBottom;
878 RECTL rclInk;
879 POINTQF ptqD;
880 } GLYPHDATA;
881
882 typedef struct _IFIEXTRA {
883 ULONG ulIdentifier;
884 PTRDIFF dpFontSig;
885 ULONG cig;
886 PTRDIFF dpDesignVector;
887 PTRDIFF dpAxesInfoW;
888 ULONG aulReserved[1];
889 } IFIEXTRA, *PIFIEXTRA;
890
891 /* IFIMETRICS constants */
892
893 #define FM_VERSION_NUMBER 0x0
894
895 /* IFIMETRICS.fsType constants */
896 #define FM_TYPE_LICENSED 0x2
897 #define FM_READONLY_EMBED 0x4
898 #define FM_EDITABLE_EMBED 0x8
899 #define FM_NO_EMBEDDING FM_TYPE_LICENSED
900
901 /* IFIMETRICS.flInfo constants */
902 #define FM_INFO_TECH_TRUETYPE 0x00000001
903 #define FM_INFO_TECH_BITMAP 0x00000002
904 #define FM_INFO_TECH_STROKE 0x00000004
905 #define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
906 #define FM_INFO_ARB_XFORMS 0x00000010
907 #define FM_INFO_1BPP 0x00000020
908 #define FM_INFO_4BPP 0x00000040
909 #define FM_INFO_8BPP 0x00000080
910 #define FM_INFO_16BPP 0x00000100
911 #define FM_INFO_24BPP 0x00000200
912 #define FM_INFO_32BPP 0x00000400
913 #define FM_INFO_INTEGER_WIDTH 0x00000800
914 #define FM_INFO_CONSTANT_WIDTH 0x00001000
915 #define FM_INFO_NOT_CONTIGUOUS 0x00002000
916 #define FM_INFO_TECH_MM 0x00004000
917 #define FM_INFO_RETURNS_OUTLINES 0x00008000
918 #define FM_INFO_RETURNS_STROKES 0x00010000
919 #define FM_INFO_RETURNS_BITMAPS 0x00020000
920 #define FM_INFO_DSIG 0x00040000
921 #define FM_INFO_RIGHT_HANDED 0x00080000
922 #define FM_INFO_INTEGRAL_SCALING 0x00100000
923 #define FM_INFO_90DEGREE_ROTATIONS 0x00200000
924 #define FM_INFO_OPTICALLY_FIXED_PITCH 0x00400000
925 #define FM_INFO_DO_NOT_ENUMERATE 0x00800000
926 #define FM_INFO_ISOTROPIC_SCALING_ONLY 0x01000000
927 #define FM_INFO_ANISOTROPIC_SCALING_ONLY 0x02000000
928 #define FM_INFO_TECH_CFF 0x04000000
929 #define FM_INFO_FAMILY_EQUIV 0x08000000
930 #define FM_INFO_DBCS_FIXED_PITCH 0x10000000
931 #define FM_INFO_NONNEGATIVE_AC 0x20000000
932 #define FM_INFO_IGNORE_TC_RA_ABLE 0x40000000
933 #define FM_INFO_TECH_TYPE1 0x80000000
934
935 #define MAXCHARSETS 16
936
937 /* IFIMETRICS.ulPanoseCulture constants */
938 #define FM_PANOSE_CULTURE_LATIN 0x0
939
940 typedef struct _IFIMETRICS {
941 ULONG cjThis;
942 ULONG cjIfiExtra;
943 PTRDIFF dpwszFamilyName;
944 PTRDIFF dpwszStyleName;
945 PTRDIFF dpwszFaceName;
946 PTRDIFF dpwszUniqueName;
947 PTRDIFF dpFontSim;
948 LONG lEmbedId;
949 LONG lItalicAngle;
950 LONG lCharBias;
951 PTRDIFF dpCharSets;
952 BYTE jWinCharSet;
953 BYTE jWinPitchAndFamily;
954 USHORT usWinWeight;
955 ULONG flInfo;
956 USHORT fsSelection;
957 USHORT fsType;
958 FWORD fwdUnitsPerEm;
959 FWORD fwdLowestPPEm;
960 FWORD fwdWinAscender;
961 FWORD fwdWinDescender;
962 FWORD fwdMacAscender;
963 FWORD fwdMacDescender;
964 FWORD fwdMacLineGap;
965 FWORD fwdTypoAscender;
966 FWORD fwdTypoDescender;
967 FWORD fwdTypoLineGap;
968 FWORD fwdAveCharWidth;
969 FWORD fwdMaxCharInc;
970 FWORD fwdCapHeight;
971 FWORD fwdXHeight;
972 FWORD fwdSubscriptXSize;
973 FWORD fwdSubscriptYSize;
974 FWORD fwdSubscriptXOffset;
975 FWORD fwdSubscriptYOffset;
976 FWORD fwdSuperscriptXSize;
977 FWORD fwdSuperscriptYSize;
978 FWORD fwdSuperscriptXOffset;
979 FWORD fwdSuperscriptYOffset;
980 FWORD fwdUnderscoreSize;
981 FWORD fwdUnderscorePosition;
982 FWORD fwdStrikeoutSize;
983 FWORD fwdStrikeoutPosition;
984 BYTE chFirstChar;
985 BYTE chLastChar;
986 BYTE chDefaultChar;
987 BYTE chBreakChar;
988 WCHAR wcFirstChar;
989 WCHAR wcLastChar;
990 WCHAR wcDefaultChar;
991 WCHAR wcBreakChar;
992 POINTL ptlBaseline;
993 POINTL ptlAspect;
994 POINTL ptlCaret;
995 RECTL rclFontBox;
996 BYTE achVendId[4];
997 ULONG cKerningPairs;
998 ULONG ulPanoseCulture;
999 PANOSE panose;
1000 #if defined(_WIN64)
1001 PVOID Align;
1002 #endif
1003 } IFIMETRICS, *PIFIMETRICS;
1004
1005 /* LINEATTRS.fl */
1006 #define LA_GEOMETRIC 0x00000001
1007 #define LA_ALTERNATE 0x00000002
1008 #define LA_STARTGAP 0x00000004
1009 #define LA_STYLED 0x00000008
1010
1011 /* LINEATTRS.iJoin */
1012 #define JOIN_ROUND 0L
1013 #define JOIN_BEVEL 1L
1014 #define JOIN_MITER 2L
1015
1016 /* LINEATTRS.iEndCap */
1017 #define ENDCAP_ROUND 0L
1018 #define ENDCAP_SQUARE 1L
1019 #define ENDCAP_BUTT 2L
1020
1021 typedef struct _LINEATTRS {
1022 FLONG fl;
1023 ULONG iJoin;
1024 ULONG iEndCap;
1025 FLOAT_LONG elWidth;
1026 FLOATL eMiterLimit;
1027 ULONG cstyle;
1028 PFLOAT_LONG pstyle;
1029 FLOAT_LONG elStyleState;
1030 } LINEATTRS, *PLINEATTRS;
1031
1032 typedef struct _PALOBJ {
1033 ULONG ulReserved;
1034 } PALOBJ;
1035
1036 typedef struct _PERBANDINFO {
1037 BOOL bRepeatThisBand;
1038 SIZEL szlBand;
1039 ULONG ulHorzRes;
1040 ULONG ulVertRes;
1041 } PERBANDINFO, *PPERBANDINFO;
1042
1043 /* STROBJ.flAccel constants */
1044 #define SO_FLAG_DEFAULT_PLACEMENT 0x00000001
1045 #define SO_HORIZONTAL 0x00000002
1046 #define SO_VERTICAL 0x00000004
1047 #define SO_REVERSED 0x00000008
1048 #define SO_ZERO_BEARINGS 0x00000010
1049 #define SO_CHAR_INC_EQUAL_BM_BASE 0x00000020
1050 #define SO_MAXEXT_EQUAL_BM_SIDE 0x00000040
1051 #define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
1052 #define SO_GLYPHINDEX_TEXTOUT 0x00000100
1053 #define SO_ESC_NOT_ORIENT 0x00000200
1054 #define SO_DXDY 0x00000400
1055 #define SO_CHARACTER_EXTRA 0x00000800
1056 #define SO_BREAK_EXTRA 0x00001000
1057
1058 typedef struct _STROBJ {
1059 ULONG cGlyphs;
1060 FLONG flAccel;
1061 ULONG ulCharInc;
1062 RECTL rclBkGround;
1063 GLYPHPOS *pgp;
1064 LPWSTR pwszOrg;
1065 } STROBJ;
1066
1067
1068 /* SURFOBJ.iType constants */
1069 #define STYPE_BITMAP 0L
1070 #define STYPE_DEVICE 1L
1071 #define STYPE_DEVBITMAP 3L
1072
1073 /* SURFOBJ.fjBitmap constants */
1074 #define BMF_TOPDOWN 0x0001
1075 #define BMF_NOZEROINIT 0x0002
1076 #define BMF_DONTCACHE 0x0004
1077 #define BMF_USERMEM 0x0008
1078 #define BMF_KMSECTION 0x0010
1079 #define BMF_NOTSYSMEM 0x0020
1080 #define BMF_WINDOW_BLT 0x0040
1081 #define BMF_UMPDMEM 0x0080
1082 #define BMF_RESERVED 0xFF00
1083
1084 typedef struct _SURFOBJ {
1085 DHSURF dhsurf;
1086 HSURF hsurf;
1087 DHPDEV dhpdev;
1088 HDEV hdev;
1089 SIZEL sizlBitmap;
1090 ULONG cjBits;
1091 PVOID pvBits;
1092 PVOID pvScan0;
1093 LONG lDelta;
1094 ULONG iUniq;
1095 ULONG iBitmapFormat;
1096 USHORT iType;
1097 USHORT fjBitmap;
1098 } SURFOBJ;
1099
1100 typedef struct _TYPE1_FONT {
1101 HANDLE hPFM;
1102 HANDLE hPFB;
1103 ULONG ulIdentifier;
1104 } TYPE1_FONT;
1105
1106 typedef struct _WNDOBJ {
1107 CLIPOBJ coClient;
1108 PVOID pvConsumer;
1109 RECTL rclClient;
1110 SURFOBJ *psoOwner;
1111 } WNDOBJ, *PWNDOBJ;
1112
1113 typedef struct _XFORML {
1114 FLOATL eM11;
1115 FLOATL eM12;
1116 FLOATL eM21;
1117 FLOATL eM22;
1118 FLOATL eDx;
1119 FLOATL eDy;
1120 } XFORML, *PXFORML;
1121
1122 typedef struct _XFORMOBJ {
1123 ULONG ulReserved;
1124 } XFORMOBJ;
1125
1126 /* XLATEOBJ.flXlate constants */
1127 #define XO_TRIVIAL 0x00000001
1128 #define XO_TABLE 0x00000002
1129 #define XO_TO_MONO 0x00000004
1130 #define XO_FROM_CMYK 0x00000008
1131 #define XO_DEVICE_ICM 0x00000010
1132 #define XO_HOST_ICM 0x00000020
1133
1134 typedef struct _XLATEOBJ {
1135 ULONG iUniq;
1136 FLONG flXlate;
1137 USHORT iSrcType;
1138 USHORT iDstType;
1139 ULONG cEntries;
1140 ULONG *pulXlate;
1141 } XLATEOBJ;
1142
1143 /* WNDOBJCHANGEPROC.fl constants */
1144 #define WOC_RGN_CLIENT_DELTA 0x00000001
1145 #define WOC_RGN_CLIENT 0x00000002
1146 #define WOC_RGN_SURFACE_DELTA 0x00000004
1147 #define WOC_RGN_SURFACE 0x00000008
1148 #define WOC_CHANGED 0x00000010
1149 #define WOC_DELETE 0x00000020
1150 #define WOC_DRAWN 0x00000040
1151 #define WOC_SPRITE_OVERLAP 0x00000080
1152 #define WOC_SPRITE_NO_OVERLAP 0x00000100
1153 #if (NTDDI_VERSION >= NTDDI_VISTA)
1154 #define WOC_RGN_SPRITE 0x00000200
1155 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1156
1157 typedef VOID (APIENTRY CALLBACK *WNDOBJCHANGEPROC)(
1158 _In_ WNDOBJ *pwo,
1159 _In_ FLONG fl);
1160
1161
1162 ENGAPI
1163 HANDLE
1164 APIENTRY
1165 BRUSHOBJ_hGetColorTransform(
1166 _In_ BRUSHOBJ *pbo);
1167
1168 _Ret_opt_bytecount_(cj)
1169 ENGAPI
1170 PVOID
1171 APIENTRY
1172 BRUSHOBJ_pvAllocRbrush(
1173 _In_ BRUSHOBJ *pbo,
1174 _In_ ULONG cj);
1175
1176 ENGAPI
1177 PVOID
1178 APIENTRY
1179 BRUSHOBJ_pvGetRbrush(
1180 _In_ BRUSHOBJ *pbo);
1181
1182 ENGAPI
1183 ULONG
1184 APIENTRY
1185 BRUSHOBJ_ulGetBrushColor(
1186 _In_ BRUSHOBJ *pbo);
1187
1188 ENGAPI
1189 BOOL
1190 APIENTRY
1191 CLIPOBJ_bEnum(
1192 _In_ CLIPOBJ *pco,
1193 _In_ ULONG cj,
1194 _Out_bytecap_(cj) ULONG *pul);
1195
1196 /* CLIPOBJ_cEnumStart.iType constants */
1197 #define CT_RECTANGLES 0L
1198
1199 /* CLIPOBJ_cEnumStart.iDirection constants */
1200 #define CD_RIGHTDOWN 0x00000000
1201 #define CD_LEFTDOWN 0x00000001
1202 #define CD_LEFTWARDS 0x00000001
1203 #define CD_RIGHTUP 0x00000002
1204 #define CD_UPWARDS 0x00000002
1205 #define CD_LEFTUP 0x00000003
1206 #define CD_ANY 0x00000004
1207
1208 ENGAPI
1209 ULONG
1210 APIENTRY
1211 CLIPOBJ_cEnumStart(
1212 _Inout_ CLIPOBJ *pco,
1213 _In_ BOOL bAll,
1214 _In_ ULONG iType,
1215 _In_ ULONG iDirection,
1216 _In_ ULONG cLimit);
1217
1218 ENGAPI
1219 PATHOBJ*
1220 APIENTRY
1221 CLIPOBJ_ppoGetPath(
1222 _In_ CLIPOBJ *pco);
1223
1224 #if (NTDDI_VERSION >= NTDDI_VISTA)
1225 ENGAPI
1226 HANDLE
1227 APIENTRY
1228 CLIPOBJ_GetRgn(
1229 _In_ CLIPOBJ* pco);
1230 #endif
1231
1232 ENGAPI
1233 VOID
1234 APIENTRY
1235 EngAcquireSemaphore(
1236 _Inout_ HSEMAPHORE hsem);
1237
1238 #define FL_ZERO_MEMORY 0x00000001
1239 #define FL_NONPAGED_MEMORY 0x00000002
1240
1241 #ifdef USERMODE_DRIVER
1242
1243 #define EngAllocMem(fl, cj, tag) ((PVOID)GlobalAlloc(((fl) & FL_ZERO_MEMORY) ? GPTR : GMEM_FIXED, cj))
1244 #define EngAllocPrivateUserMem(psl, cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
1245 #define EngAllocUserMem(cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
1246
1247 #else
1248
1249 _Must_inspect_result_
1250 _When_(fl & FL_ZERO_MEMORY, _Ret_opt_bytecount_(cjMemSize))
1251 _When_(!(fl & FL_ZERO_MEMORY), _Ret_opt_bytecap_(cjMemSize))
1252 ENGAPI
1253 PVOID
1254 APIENTRY
1255 EngAllocMem(
1256 _In_ ULONG fl,
1257 _In_ ULONG cjMemSize,
1258 _In_ ULONG ulTag);
1259
1260 _Must_inspect_result_
1261 _Ret_opt_bytecount_(cjMemSize)
1262 ENGAPI
1263 PVOID
1264 APIENTRY
1265 EngAllocPrivateUserMem(
1266 _In_ PDD_SURFACE_LOCAL psl,
1267 _In_ SIZE_T cjMemSize,
1268 _In_ ULONG ulTag);
1269
1270 _Must_inspect_result_
1271 _Ret_opt_bytecount_(cjMemSize)
1272 ENGAPI
1273 PVOID
1274 APIENTRY
1275 EngAllocUserMem(
1276 _In_ SIZE_T cjMemSize,
1277 _In_ ULONG ulTag);
1278
1279 #endif /* USERMODE_DRIVER */
1280
1281 ENGAPI
1282 BOOL
1283 APIENTRY
1284 EngAlphaBlend(
1285 _Inout_ SURFOBJ *psoDest,
1286 _In_ SURFOBJ *psoSrc,
1287 _In_opt_ CLIPOBJ *pco,
1288 _In_opt_ XLATEOBJ *pxlo,
1289 _In_ RECTL *prclDest,
1290 _In_ RECTL *prclSrc,
1291 _In_ BLENDOBJ *pBlendObj);
1292
1293 /* EngAssociateSurface.flHooks constants */
1294 #define HOOK_BITBLT 0x00000001
1295 #define HOOK_STRETCHBLT 0x00000002
1296 #define HOOK_PLGBLT 0x00000004
1297 #define HOOK_TEXTOUT 0x00000008
1298 #define HOOK_PAINT 0x00000010
1299 #define HOOK_STROKEPATH 0x00000020
1300 #define HOOK_FILLPATH 0x00000040
1301 #define HOOK_STROKEANDFILLPATH 0x00000080
1302 #define HOOK_LINETO 0x00000100
1303 #define HOOK_COPYBITS 0x00000400
1304 #define HOOK_MOVEPANNING 0x00000800
1305 #define HOOK_SYNCHRONIZE 0x00001000
1306 #define HOOK_STRETCHBLTROP 0x00002000
1307 #define HOOK_SYNCHRONIZEACCESS 0x00004000
1308 #define HOOK_TRANSPARENTBLT 0x00008000
1309 #define HOOK_ALPHABLEND 0x00010000
1310 #define HOOK_GRADIENTFILL 0x00020000
1311 #if (NTDDI_VERSION >= NTDDI_VISTA)
1312 #define HOOK_FLAGS 0x0003b5ef
1313 #else
1314 #define HOOK_FLAGS 0x0003b5ff
1315 #endif
1316
1317 ENGAPI
1318 BOOL
1319 APIENTRY
1320 EngAssociateSurface(
1321 _In_ HSURF hsurf,
1322 _In_ HDEV hdev,
1323 _In_ FLONG flHooks);
1324
1325 ENGAPI
1326 BOOL
1327 APIENTRY
1328 EngBitBlt(
1329 _Inout_ SURFOBJ *psoTrg,
1330 _In_opt_ SURFOBJ *psoSrc,
1331 _In_opt_ SURFOBJ *psoMask,
1332 _In_opt_ CLIPOBJ *pco,
1333 _In_opt_ XLATEOBJ *pxlo,
1334 _In_ RECTL *prclTrg,
1335 _In_opt_ POINTL *pptlSrc,
1336 _In_opt_ POINTL *pptlMask,
1337 _In_opt_ BRUSHOBJ *pbo,
1338 _In_opt_ POINTL *pptlBrush,
1339 _In_ ROP4 rop4);
1340
1341 ENGAPI
1342 BOOL
1343 APIENTRY
1344 EngCheckAbort(
1345 _In_ SURFOBJ *pso);
1346
1347 ENGAPI
1348 VOID
1349 APIENTRY
1350 EngClearEvent(
1351 _In_ PEVENT pEvent);
1352
1353 ENGAPI
1354 FD_GLYPHSET*
1355 APIENTRY
1356 EngComputeGlyphSet(
1357 _In_ INT nCodePage,
1358 _In_ INT nFirstChar,
1359 _In_ INT cChars);
1360
1361 /* EngControlSprites.fl constants */
1362 #define ECS_TEARDOWN 0x00000001
1363 #define ECS_REDRAW 0x00000002
1364
1365 ENGAPI
1366 BOOL
1367 APIENTRY
1368 EngControlSprites(
1369 _Inout_ WNDOBJ *pwo,
1370 _In_ FLONG fl);
1371
1372 ENGAPI
1373 BOOL
1374 APIENTRY
1375 EngCopyBits(
1376 _In_ SURFOBJ *psoDest,
1377 _In_ SURFOBJ *psoSrc,
1378 _In_opt_ CLIPOBJ *pco,
1379 _In_opt_ XLATEOBJ *pxlo,
1380 _In_ RECTL *prclDest,
1381 _In_ POINTL *pptlSrc);
1382
1383 ENGAPI
1384 HBITMAP
1385 APIENTRY
1386 EngCreateBitmap(
1387 _In_ SIZEL sizl,
1388 _In_ LONG lWidth,
1389 _In_ ULONG iFormat,
1390 _In_ FLONG fl,
1391 _In_opt_ PVOID pvBits);
1392
1393 ENGAPI
1394 CLIPOBJ*
1395 APIENTRY
1396 EngCreateClip(VOID);
1397
1398 _Must_inspect_result_
1399 ENGAPI
1400 HBITMAP
1401 APIENTRY
1402 EngCreateDeviceBitmap(
1403 _In_ DHSURF dhsurf,
1404 _In_ SIZEL sizl,
1405 _In_ ULONG iFormatCompat);
1406
1407 _Must_inspect_result_
1408 ENGAPI
1409 HSURF
1410 APIENTRY
1411 EngCreateDeviceSurface(
1412 _In_ DHSURF dhsurf,
1413 _In_ SIZEL sizl,
1414 _In_ ULONG iFormatCompat);
1415
1416 _Must_inspect_result_
1417 ENGAPI
1418 HDRVOBJ
1419 APIENTRY
1420 EngCreateDriverObj(
1421 _In_ PVOID pvObj,
1422 _In_opt_ FREEOBJPROC pFreeObjProc,
1423 _In_ HDEV hdev);
1424
1425 _Must_inspect_result_
1426 _Success_(return != FALSE)
1427 ENGAPI
1428 BOOL
1429 APIENTRY
1430 EngCreateEvent(
1431 _Outptr_ PEVENT *ppEvent);
1432
1433 /* EngCreatePalette.iMode constants */
1434 #define PAL_INDEXED 0x00000001
1435 #define PAL_BITFIELDS 0x00000002
1436 #define PAL_RGB 0x00000004
1437 #define PAL_BGR 0x00000008
1438 #define PAL_CMYK 0x00000010
1439
1440 _Must_inspect_result_
1441 ENGAPI
1442 HPALETTE
1443 APIENTRY
1444 EngCreatePalette(
1445 _In_ ULONG iMode,
1446 _In_ ULONG cColors,
1447 _In_ ULONG *pulColors,
1448 _In_ FLONG flRed,
1449 _In_ FLONG flGreen,
1450 _In_ FLONG flBlue);
1451
1452 ENGAPI
1453 PATHOBJ*
1454 APIENTRY
1455 EngCreatePath(VOID);
1456
1457 ENGAPI
1458 HSEMAPHORE
1459 APIENTRY
1460 EngCreateSemaphore(VOID);
1461
1462 /* EngCreateWnd.fl constants */
1463 #define WO_RGN_CLIENT_DELTA 0x00000001
1464 #define WO_RGN_CLIENT 0x00000002
1465 #define WO_RGN_SURFACE_DELTA 0x00000004
1466 #define WO_RGN_SURFACE 0x00000008
1467 #define WO_RGN_UPDATE_ALL 0x00000010
1468 #define WO_RGN_WINDOW 0x00000020
1469 #define WO_DRAW_NOTIFY 0x00000040
1470 #define WO_SPRITE_NOTIFY 0x00000080
1471 #define WO_RGN_DESKTOP_COORD 0x00000100
1472 #if (NTDDI_VERSION >= NTDDI_VISTA)
1473 #define WO_RGN_SPRITE 0x00000200
1474 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1475
1476 _Must_inspect_result_
1477 ENGAPI
1478 WNDOBJ*
1479 APIENTRY
1480 EngCreateWnd(
1481 _In_ SURFOBJ *pso,
1482 _In_ HWND hwnd,
1483 _In_ WNDOBJCHANGEPROC pfn,
1484 _In_ FLONG fl,
1485 _In_ INT iPixelFormat);
1486
1487 _Analysis_noreturn_
1488 ENGAPI
1489 VOID
1490 APIENTRY
1491 EngDebugBreak(VOID);
1492
1493 ENGAPI
1494 VOID
1495 APIENTRY
1496 EngDebugPrint(
1497 _In_z_ PCHAR StandardPrefix,
1498 _In_z_ PCHAR DebugMessage,
1499 _In_ va_list ap);
1500
1501 ENGAPI
1502 VOID
1503 APIENTRY
1504 EngDeleteClip(
1505 _In_ _Post_ptr_invalid_ CLIPOBJ *pco);
1506
1507 ENGAPI
1508 BOOL
1509 APIENTRY
1510 EngDeleteDriverObj(
1511 _In_ _Post_ptr_invalid_ HDRVOBJ hdo,
1512 _In_ BOOL bCallBack,
1513 _In_ BOOL bLocked);
1514
1515 ENGAPI
1516 BOOL
1517 APIENTRY
1518 EngDeleteEvent(
1519 _In_ _Post_ptr_invalid_ PEVENT pEvent);
1520
1521 ENGAPI
1522 BOOL
1523 APIENTRY
1524 EngDeleteFile(
1525 _In_ LPWSTR pwszFileName);
1526
1527 ENGAPI
1528 BOOL
1529 APIENTRY
1530 EngDeletePalette(
1531 _In_ _Post_ptr_invalid_ HPALETTE hpal);
1532
1533 ENGAPI
1534 VOID
1535 APIENTRY
1536 EngDeletePath(
1537 _In_ _Post_ptr_invalid_ PATHOBJ *ppo);
1538
1539 ENGAPI
1540 VOID
1541 APIENTRY
1542 EngDeleteSafeSemaphore(
1543 _Inout_ ENGSAFESEMAPHORE *pssem);
1544
1545 ENGAPI
1546 VOID
1547 APIENTRY
1548 EngDeleteSemaphore(
1549 _In_ _Post_ptr_invalid_ HSEMAPHORE hsem);
1550
1551 ENGAPI
1552 BOOL
1553 APIENTRY
1554 EngDeleteSurface(
1555 _In_ _Post_ptr_invalid_ HSURF hsurf);
1556
1557 ENGAPI
1558 VOID
1559 APIENTRY
1560 EngDeleteWnd(
1561 _In_ _Post_ptr_invalid_ WNDOBJ *pwo);
1562
1563 _Success_(return==0)
1564 ENGAPI
1565 DWORD
1566 APIENTRY
1567 EngDeviceIoControl(
1568 _In_ HANDLE hDevice,
1569 _In_ DWORD dwIoControlCode,
1570 _In_opt_bytecount_(cjInBufferSize) LPVOID lpInBuffer,
1571 _In_ DWORD cjInBufferSize,
1572 _Out_opt_bytecap_(cjOutBufferSize) LPVOID lpOutBuffer,
1573 _In_ DWORD cjOutBufferSize,
1574 _Out_ LPDWORD lpBytesReturned);
1575
1576 #define DM_DEFAULT 0x00000001
1577 #define DM_MONOCHROME 0x00000002
1578
1579 ENGAPI
1580 ULONG
1581 APIENTRY
1582 EngDitherColor(
1583 _In_ HDEV hdev,
1584 _In_ ULONG iMode,
1585 _In_ ULONG rgb,
1586 _When_(iMode == DM_DEFAULT, _Out_writes_bytes_(16*8))
1587 _When_(iMode == DM_MONOCHROME, _Out_writes_bytes_(8))
1588 ULONG *pul);
1589
1590 ENGAPI
1591 BOOL
1592 APIENTRY
1593 EngEnumForms(
1594 _In_ HANDLE hPrinter,
1595 _In_ DWORD Level,
1596 _Out_writes_bytes_opt_(cbBuf) LPBYTE pForm,
1597 _In_ DWORD cbBuf,
1598 _Out_ LPDWORD pcbNeeded,
1599 _Out_ LPDWORD pcReturned);
1600
1601 ENGAPI
1602 BOOL
1603 APIENTRY
1604 EngEraseSurface(
1605 _In_ SURFOBJ *pso,
1606 _In_ RECTL *prcl,
1607 _In_ ULONG iColor);
1608
1609 ENGAPI
1610 BOOL
1611 APIENTRY
1612 EngFillPath(
1613 _Inout_ SURFOBJ *pso,
1614 _In_ PATHOBJ *ppo,
1615 _In_ CLIPOBJ *pco,
1616 _In_ BRUSHOBJ *pbo,
1617 _In_ POINTL *pptlBrushOrg,
1618 _In_ MIX mix,
1619 _In_ FLONG flOptions);
1620
1621 ENGAPI
1622 PVOID
1623 APIENTRY
1624 EngFindImageProcAddress(
1625 _In_ HANDLE hModule,
1626 _In_ LPSTR lpProcName);
1627
1628 ENGAPI
1629 PVOID
1630 APIENTRY
1631 EngFindResource(
1632 _In_ HANDLE h,
1633 _In_ INT iName,
1634 _In_ INT iType,
1635 _Out_ PULONG pulSize);
1636
1637 _Must_inspect_result_
1638 _Ret_opt_bytecap_(cjSize)
1639 ENGAPI
1640 PVOID
1641 APIENTRY
1642 EngFntCacheAlloc(
1643 _In_ ULONG ulFastCheckSum,
1644 _In_ ULONG cjSize);
1645
1646 /* EngFntCacheFault.iFaultMode constants */
1647 #define ENG_FNT_CACHE_READ_FAULT 0x00000001
1648 #define ENG_FNT_CACHE_WRITE_FAULT 0x00000002
1649
1650 ENGAPI
1651 VOID
1652 APIENTRY
1653 EngFntCacheFault(
1654 _In_ ULONG ulFastCheckSum,
1655 _In_ ULONG iFaultMode);
1656
1657 ENGAPI
1658 PVOID
1659 APIENTRY
1660 EngFntCacheLookUp(
1661 _In_ ULONG FastCheckSum,
1662 _Out_ ULONG *pulSize);
1663
1664 #ifdef USERMODE_DRIVER
1665
1666 #define EngFreeMem(p) GlobalFree((HGLOBAL) (p))
1667 #define EngFreePrivateUserMem( psl, p) GlobalFree((HGLOBAL) (p))
1668 #define EngFreeUserMem(p) GlobalFree((HGLOBAL) (p))
1669
1670 #else /* !USERMODE_DRIVER */
1671
1672 ENGAPI
1673 VOID
1674 APIENTRY
1675 EngFreeMem(
1676 _In_ _Post_ptr_invalid_ PVOID pv);
1677
1678 ENGAPI
1679 VOID
1680 APIENTRY
1681 EngFreePrivateUserMem(
1682 _In_ PDD_SURFACE_LOCAL psl,
1683 _In_ _Post_ptr_invalid_ PVOID pv);
1684
1685 ENGAPI
1686 VOID
1687 APIENTRY
1688 EngFreeUserMem(
1689 _In_ _Post_ptr_invalid_ PVOID pv);
1690
1691 #endif /* !USERMODE_DRIVER */
1692
1693 ENGAPI
1694 VOID
1695 APIENTRY
1696 EngFreeModule(
1697 _In_ HANDLE h);
1698
1699
1700 ENGAPI
1701 VOID
1702 APIENTRY
1703 EngGetCurrentCodePage(
1704 _Out_ PUSHORT OemCodePage,
1705 _Out_ PUSHORT AnsiCodePage);
1706
1707 ENGAPI
1708 HANDLE
1709 APIENTRY
1710 EngGetCurrentProcessId(VOID);
1711
1712 ENGAPI
1713 HANDLE
1714 APIENTRY
1715 EngGetCurrentThreadId(VOID);
1716
1717 _Must_inspect_result_ _Ret_z_
1718 ENGAPI
1719 LPWSTR
1720 APIENTRY
1721 EngGetDriverName(
1722 _In_ HDEV hdev);
1723
1724 ENGAPI
1725 BOOL
1726 APIENTRY
1727 EngGetFileChangeTime(
1728 _In_ HANDLE h,
1729 _Out_ LARGE_INTEGER *pChangeTime);
1730
1731 ENGAPI
1732 BOOL
1733 APIENTRY
1734 EngGetFilePath(
1735 _In_ HANDLE h,
1736 _Out_ WCHAR (*pDest)[MAX_PATH+1]);
1737
1738 ENGAPI
1739 BOOL
1740 APIENTRY
1741 EngGetForm(
1742 _In_ HANDLE hPrinter,
1743 _In_ LPWSTR pFormName,
1744 _In_ DWORD Level,
1745 _In_reads_bytes_opt_(cbBuf) LPBYTE pForm,
1746 _In_ DWORD cbBuf,
1747 _Out_ LPDWORD pcbNeeded);
1748
1749 #ifdef USERMODE_DRIVER
1750 #define EngGetLastError GetLastError
1751 #else
1752 ENGAPI
1753 ULONG
1754 APIENTRY
1755 EngGetLastError(VOID);
1756 #endif
1757
1758 ENGAPI
1759 BOOL
1760 APIENTRY
1761 EngGetPrinter(
1762 _In_ HANDLE hPrinter,
1763 _In_ DWORD dwLevel,
1764 _Out_writes_bytes_opt_(cbBuf) LPBYTE pPrinter,
1765 _In_ DWORD cbBuf,
1766 _Out_ LPDWORD pcbNeeded);
1767
1768 ENGAPI
1769 DWORD
1770 APIENTRY
1771 EngGetPrinterData(
1772 _In_ HANDLE hPrinter,
1773 _In_ LPWSTR pValueName,
1774 _Out_opt_ LPDWORD pType,
1775 _Out_writes_bytes_opt_(cjSize) LPBYTE pData,
1776 _In_ DWORD cjSize,
1777 _Out_ LPDWORD pcjNeeded);
1778
1779 ENGAPI
1780 LPWSTR
1781 APIENTRY
1782 EngGetPrinterDataFileName(
1783 _In_ HDEV hdev);
1784
1785 ENGAPI
1786 BOOL
1787 APIENTRY
1788 EngGetPrinterDriver(
1789 _In_ HANDLE hPrinter,
1790 _In_opt_ LPWSTR pEnvironment,
1791 _In_ DWORD dwLevel,
1792 _Out_writes_bytes_opt_(cjBufSize) BYTE *lpbDrvInfo,
1793 _In_ DWORD cjBufSize,
1794 _Out_ DWORD *pcjNeeded);
1795
1796 ENGAPI
1797 HANDLE
1798 APIENTRY
1799 EngGetProcessHandle(VOID);
1800
1801 ENGAPI
1802 BOOL
1803 APIENTRY
1804 EngGetType1FontList(
1805 _In_ HDEV hdev,
1806 _Out_writes_bytes_opt_(cjType1Buffer) TYPE1_FONT *pType1Buffer,
1807 _In_ ULONG cjType1Buffer,
1808 _Out_ PULONG pulLocalFonts,
1809 _Out_ PULONG pulRemoteFonts,
1810 _Out_ LARGE_INTEGER *pLastModified);
1811
1812 ENGAPI
1813 BOOL
1814 APIENTRY
1815 EngGradientFill(
1816 _Inout_ SURFOBJ *psoDest,
1817 _In_ CLIPOBJ *pco,
1818 _In_opt_ XLATEOBJ *pxlo,
1819 _In_ TRIVERTEX *pVertex,
1820 _In_ ULONG nVertex,
1821 _In_ PVOID pMesh,
1822 _In_ ULONG nMesh,
1823 _In_ RECTL *prclExtents,
1824 _In_ POINTL *pptlDitherOrg,
1825 _In_ ULONG ulMode);
1826
1827 /* EngHangNotification return values */
1828 #define EHN_RESTORED 0x00000000
1829 #define EHN_ERROR 0x00000001
1830
1831 ENGAPI
1832 ULONG
1833 APIENTRY
1834 EngHangNotification(
1835 _In_ HDEV hDev,
1836 _Reserved_ PVOID Reserved);
1837
1838 ENGAPI
1839 BOOL
1840 APIENTRY
1841 EngInitializeSafeSemaphore(
1842 _Out_ ENGSAFESEMAPHORE *pssem);
1843
1844 ENGAPI
1845 BOOL
1846 APIENTRY
1847 EngIsSemaphoreOwned(
1848 _In_ HSEMAPHORE hsem);
1849
1850 ENGAPI
1851 BOOL
1852 APIENTRY
1853 EngIsSemaphoreOwnedByCurrentThread(
1854 _In_ HSEMAPHORE hsem);
1855
1856 ENGAPI
1857 BOOL
1858 APIENTRY
1859 EngLineTo(
1860 _Inout_ SURFOBJ *pso,
1861 _In_ CLIPOBJ *pco,
1862 _In_ BRUSHOBJ *pbo,
1863 _In_ LONG x1,
1864 _In_ LONG y1,
1865 _In_ LONG x2,
1866 _In_ LONG y2,
1867 _In_opt_ RECTL *prclBounds,
1868 _In_ MIX mix);
1869
1870 ENGAPI
1871 HANDLE
1872 APIENTRY
1873 EngLoadImage(
1874 _In_ LPWSTR pwszDriver);
1875
1876 ENGAPI
1877 HANDLE
1878 APIENTRY
1879 EngLoadModule(
1880 _In_ LPWSTR pwsz);
1881
1882 ENGAPI
1883 HANDLE
1884 APIENTRY
1885 EngLoadModuleForWrite(
1886 _In_ LPWSTR pwsz,
1887 _In_ ULONG cjSizeOfModule);
1888
1889 ENGAPI
1890 PDD_SURFACE_LOCAL
1891 APIENTRY
1892 EngLockDirectDrawSurface(
1893 _In_ HANDLE hSurface);
1894
1895 ENGAPI
1896 DRIVEROBJ*
1897 APIENTRY
1898 EngLockDriverObj(
1899 _In_ HDRVOBJ hdo);
1900
1901 ENGAPI
1902 SURFOBJ*
1903 APIENTRY
1904 EngLockSurface(
1905 _In_ HSURF hsurf);
1906
1907 ENGAPI
1908 BOOL
1909 APIENTRY
1910 EngLpkInstalled(VOID);
1911
1912 ENGAPI
1913 PEVENT
1914 APIENTRY
1915 EngMapEvent(
1916 _In_ HDEV hDev,
1917 _In_ HANDLE hUserObject,
1918 _Reserved_ PVOID Reserved1,
1919 _Reserved_ PVOID Reserved2,
1920 _Reserved_ PVOID Reserved3);
1921
1922 _Success_(return != 0)
1923 _When_(cjSize != 0, _At_(return, _Out_writes_bytes_(cjSize)))
1924 ENGAPI
1925 PVOID
1926 APIENTRY
1927 EngMapFile(
1928 _In_ LPWSTR pwsz,
1929 _In_ ULONG cjSize,
1930 _Out_ ULONG_PTR *piFile);
1931
1932 ENGAPI
1933 BOOL
1934 APIENTRY
1935 EngMapFontFile(
1936 _In_ ULONG_PTR iFile,
1937 _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
1938 _Out_ ULONG *pcjBuf);
1939
1940 ENGAPI
1941 BOOL
1942 APIENTRY
1943 EngMapFontFileFD(
1944 _In_ ULONG_PTR iFile,
1945 _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf,
1946 _Out_ ULONG *pcjBuf);
1947
1948 ENGAPI
1949 PVOID
1950 APIENTRY
1951 EngMapModule(
1952 _In_ HANDLE h,
1953 _Out_ PULONG pSize);
1954
1955 ENGAPI
1956 BOOL
1957 APIENTRY
1958 EngMarkBandingSurface(
1959 _In_ HSURF hsurf);
1960
1961 /* EngModifySurface.flSurface constants */
1962 #define MS_NOTSYSTEMMEMORY 0x00000001
1963 #define MS_SHAREDACCESS 0x00000002
1964
1965 ENGAPI
1966 BOOL
1967 APIENTRY
1968 EngModifySurface(
1969 _In_ HSURF hsurf,
1970 _In_ HDEV hdev,
1971 _In_ FLONG flHooks,
1972 _In_ FLONG flSurface,
1973 _In_ DHSURF dhsurf,
1974 _In_ PVOID pvScan0,
1975 _In_ LONG lDelta,
1976 _Reserved_ PVOID pvReserved);
1977
1978 ENGAPI
1979 VOID
1980 APIENTRY
1981 EngMovePointer(
1982 _In_ SURFOBJ *pso,
1983 _In_ LONG x,
1984 _In_ LONG y,
1985 _In_ RECTL *prcl);
1986
1987 #ifdef USERMODE_DRIVER
1988 #define EngMulDiv MulDiv
1989 #else /* !USERMODE_DRIVER */
1990 ENGAPI
1991 INT
1992 APIENTRY
1993 EngMulDiv(
1994 _In_ INT a,
1995 _In_ INT b,
1996 _In_ INT c);
1997 #endif /* !USERMODE_DRIVER */
1998
1999 ENGAPI
2000 VOID
2001 APIENTRY
2002 EngMultiByteToUnicodeN(
2003 _Out_writes_bytes_to_(MaxBytesInUnicodeString, *BytesInUnicodeString) LPWSTR UnicodeString,
2004 _In_ ULONG MaxBytesInUnicodeString,
2005 _Out_opt_ PULONG BytesInUnicodeString,
2006 _In_reads_bytes_(BytesInMultiByteString) PCHAR MultiByteString,
2007 _In_ ULONG BytesInMultiByteString);
2008
2009 ENGAPI
2010 INT
2011 APIENTRY
2012 EngMultiByteToWideChar(
2013 _In_ UINT CodePage,
2014 _Out_writes_bytes_opt_(cjWideCharString) LPWSTR WideCharString,
2015 _In_ INT cjWideCharString,
2016 _In_reads_bytes_opt_(cjMultiByteString) LPSTR MultiByteString,
2017 _In_ INT cjMultiByteString);
2018
2019 ENGAPI
2020 BOOL
2021 APIENTRY
2022 EngPaint(
2023 _In_ SURFOBJ *pso,
2024 _In_ CLIPOBJ *pco,
2025 _In_ BRUSHOBJ *pbo,
2026 _In_ POINTL *pptlBrushOrg,
2027 _In_ MIX mix);
2028
2029 ENGAPI
2030 BOOL
2031 APIENTRY
2032 EngPlgBlt(
2033 _In_ SURFOBJ *psoTrg,
2034 _In_ SURFOBJ *psoSrc,
2035 _In_opt_ SURFOBJ *psoMsk,
2036 _In_ CLIPOBJ *pco,
2037 _In_opt_ XLATEOBJ *pxlo,
2038 _In_ COLORADJUSTMENT *pca,
2039 _In_ POINTL *pptlBrushOrg,
2040 _In_ POINTFIX *pptfx,
2041 _In_ RECTL *prcl,
2042 _When_(psoMsk, _In_) POINTL *pptl,
2043 _In_ ULONG iMode);
2044
2045 ENGAPI
2046 VOID
2047 APIENTRY
2048 EngProbeForRead(
2049 _In_reads_bytes_(Length) PVOID Address,
2050 #if (NTDDI_VERSION <= NTDDI_WINXP)
2051 _In_ ULONG Length,
2052 #else
2053 _In_ SIZE_T Length,
2054 #endif
2055 _In_ ULONG Alignment);
2056
2057 ENGAPI
2058 VOID
2059 APIENTRY
2060 EngProbeForReadAndWrite(
2061 _Inout_updates_bytes_(Length) PVOID Address,
2062 #if (NTDDI_VERSION <= NTDDI_WINXP)
2063 _In_ ULONG Length,
2064 #else
2065 _In_ SIZE_T Length,
2066 #endif
2067 _In_ ULONG Alignment);
2068
2069 typedef enum _ENG_DEVICE_ATTRIBUTE {
2070 QDA_RESERVED = 0,
2071 QDA_ACCELERATION_LEVEL
2072 } ENG_DEVICE_ATTRIBUTE;
2073
2074 ENGAPI
2075 BOOL
2076 APIENTRY
2077 EngQueryDeviceAttribute(
2078 _In_ HDEV hdev,
2079 _In_ ENG_DEVICE_ATTRIBUTE devAttr,
2080 _In_reads_bytes_(cjInSize) PVOID pvIn,
2081 _In_ ULONG cjInSize,
2082 _Out_writes_bytes_(cjOutSize) PVOID pvOut,
2083 _In_ ULONG cjOutSize);
2084
2085 ENGAPI
2086 LARGE_INTEGER
2087 APIENTRY
2088 EngQueryFileTimeStamp(
2089 _In_ LPWSTR pwsz);
2090
2091 ENGAPI
2092 VOID
2093 APIENTRY
2094 EngQueryLocalTime(
2095 _Out_ PENG_TIME_FIELDS ptf);
2096
2097 ENGAPI
2098 ULONG
2099 APIENTRY
2100 EngQueryPalette(
2101 _In_ HPALETTE hPal,
2102 _Out_ ULONG *piMode,
2103 _In_ ULONG cColors,
2104 _Out_writes_opt_(cColors) ULONG *pulColors);
2105
2106 ENGAPI
2107 VOID
2108 APIENTRY
2109 EngQueryPerformanceCounter(
2110 _Out_ LONGLONG *pPerformanceCount);
2111
2112 ENGAPI
2113 VOID
2114 APIENTRY
2115 EngQueryPerformanceFrequency(
2116 _Out_ LONGLONG *pFrequency);
2117
2118 typedef enum _ENG_SYSTEM_ATTRIBUTE {
2119 EngProcessorFeature = 1,
2120 EngNumberOfProcessors,
2121 EngOptimumAvailableUserMemory,
2122 EngOptimumAvailableSystemMemory,
2123 } ENG_SYSTEM_ATTRIBUTE;
2124
2125 #define QSA_MMX 0x00000100
2126 #define QSA_SSE 0x00002000
2127 #define QSA_3DNOW 0x00004000
2128
2129 _Check_return_
2130 _Success_(return)
2131 ENGAPI
2132 BOOL
2133 APIENTRY
2134 EngQuerySystemAttribute(
2135 _In_ ENG_SYSTEM_ATTRIBUTE CapNum,
2136 _Out_ PDWORD pCapability);
2137
2138 ENGAPI
2139 LONG
2140 APIENTRY
2141 EngReadStateEvent(
2142 _In_ PEVENT pEvent);
2143
2144 ENGAPI
2145 VOID
2146 APIENTRY
2147 EngReleaseSemaphore(
2148 _In_ HSEMAPHORE hsem);
2149
2150 _Check_return_
2151 _Success_(return)
2152 _Kernel_float_restored_
2153 _At_(*pBuffer, _Kernel_requires_resource_held_(EngFloatState)
2154 _Kernel_releases_resource_(EngFloatState))
2155 ENGAPI
2156 BOOL
2157 APIENTRY
2158 EngRestoreFloatingPointState(
2159 _In_reads_(_Inexpressible_(statesize))
2160 PVOID pBuffer);
2161
2162 _Check_return_
2163 _Success_(((pBuffer != NULL && cjBufferSize != 0) && return == 1) ||
2164 ((pBuffer == NULL || cjBufferSize == 0) && return > 0))
2165 _When_(pBuffer != NULL && cjBufferSize != 0 && return == 1, _Kernel_float_saved_
2166 _At_(*pBuffer, _Post_valid_ _Kernel_acquires_resource_(EngFloatState)))
2167 _On_failure_(_Post_satisfies_(return == 0))
2168 ENGAPI
2169 ULONG
2170 APIENTRY
2171 EngSaveFloatingPointState(
2172 _At_(*pBuffer, _Kernel_requires_resource_not_held_(EngFloatState))
2173 _Out_writes_bytes_opt_(cjBufferSize) PVOID pBuffer,
2174 _Inout_ ULONG cjBufferSize);
2175
2176 ENGAPI
2177 HANDLE
2178 APIENTRY
2179 EngSecureMem(
2180 _In_reads_bytes_(cjLength) PVOID Address,
2181 _In_ ULONG cjLength);
2182
2183 ENGAPI
2184 LONG
2185 APIENTRY
2186 EngSetEvent(
2187 _In_ PEVENT pEvent);
2188
2189 #ifdef USERMODE_DRIVER
2190 #define EngSetLastError SetLastError
2191 #else
2192 ENGAPI
2193 VOID
2194 APIENTRY
2195 EngSetLastError(
2196 _In_ ULONG iError);
2197 #endif
2198
2199 ENGAPI
2200 ULONG
2201 APIENTRY
2202 EngSetPointerShape(
2203 _In_ SURFOBJ *pso,
2204 _In_opt_ SURFOBJ *psoMask,
2205 _In_opt_ SURFOBJ *psoColor,
2206 _In_opt_ XLATEOBJ *pxlo,
2207 _In_ LONG xHot,
2208 _In_ LONG yHot,
2209 _In_ LONG x,
2210 _In_ LONG y,
2211 _In_ RECTL *prcl,
2212 _In_ FLONG fl);
2213
2214 ENGAPI
2215 BOOL
2216 APIENTRY
2217 EngSetPointerTag(
2218 _In_ HDEV hdev,
2219 _In_opt_ SURFOBJ *psoMask,
2220 _In_opt_ SURFOBJ *psoColor,
2221 _Reserved_ XLATEOBJ *pxlo,
2222 _In_ FLONG fl);
2223
2224 ENGAPI
2225 DWORD
2226 APIENTRY
2227 EngSetPrinterData(
2228 _In_ HANDLE hPrinter,
2229 _In_ LPWSTR pType,
2230 _In_ DWORD dwType,
2231 _In_reads_bytes_(cjPrinterData) LPBYTE lpbPrinterData,
2232 _In_ DWORD cjPrinterData);
2233
2234 typedef int (CDECL *SORTCOMP)(const void *pv1, const void *pv2);
2235
2236 ENGAPI
2237 VOID
2238 APIENTRY
2239 EngSort(
2240 _Inout_updates_bytes_(c * cjElem) PBYTE pjBuf,
2241 _In_ ULONG c,
2242 _In_ ULONG cjElem,
2243 _In_ SORTCOMP pfnComp);
2244
2245 ENGAPI
2246 BOOL
2247 APIENTRY
2248 EngStretchBlt(
2249 _In_ SURFOBJ *psoDest,
2250 _In_ SURFOBJ *psoSrc,
2251 _In_opt_ SURFOBJ *psoMask,
2252 _In_opt_ CLIPOBJ *pco,
2253 _In_opt_ XLATEOBJ *pxlo,
2254 _In_opt_ COLORADJUSTMENT *pca,
2255 _In_ POINTL *pptlHTOrg,
2256 _In_ RECTL *prclDest,
2257 _In_ RECTL *prclSrc,
2258 _When_(psoMask, _In_) POINTL *pptlMask,
2259 _In_ ULONG iMode);
2260
2261 ENGAPI
2262 BOOL
2263 APIENTRY
2264 EngStretchBltROP(
2265 _In_ SURFOBJ *psoDest,
2266 _In_ SURFOBJ *psoSrc,
2267 _In_opt_ SURFOBJ *psoMask,
2268 _In_opt_ CLIPOBJ *pco,
2269 _In_opt_ XLATEOBJ *pxlo,
2270 _In_opt_ COLORADJUSTMENT *pca,
2271 _In_ POINTL *pptlHTOrg,
2272 _In_ RECTL *prclDest,
2273 _In_ RECTL *prclSrc,
2274 _When_(psoMask, _In_) POINTL *pptlMask,
2275 _In_ ULONG iMode,
2276 _In_opt_ BRUSHOBJ *pbo,
2277 _In_ DWORD rop4);
2278
2279 ENGAPI
2280 BOOL
2281 APIENTRY
2282 EngStrokeAndFillPath(
2283 _Inout_ SURFOBJ *pso,
2284 _In_ PATHOBJ *ppo,
2285 _In_ CLIPOBJ *pco,
2286 _In_ XFORMOBJ *pxo,
2287 _In_ BRUSHOBJ *pboStroke,
2288 _In_ LINEATTRS *plineattrs,
2289 _In_ BRUSHOBJ *pboFill,
2290 _In_ POINTL *pptlBrushOrg,
2291 _In_ MIX mixFill,
2292 _In_ FLONG flOptions);
2293
2294 ENGAPI
2295 BOOL
2296 APIENTRY
2297 EngStrokePath(
2298 _In_ SURFOBJ *pso,
2299 _In_ PATHOBJ *ppo,
2300 _In_ CLIPOBJ *pco,
2301 _In_ XFORMOBJ *pxo,
2302 _In_ BRUSHOBJ *pbo,
2303 _In_ POINTL *pptlBrushOrg,
2304 _In_ LINEATTRS *plineattrs,
2305 _In_ MIX mix);
2306
2307 ENGAPI
2308 BOOL
2309 APIENTRY
2310 EngTextOut(
2311 _In_ SURFOBJ *pso,
2312 _In_ STROBJ *pstro,
2313 _In_ FONTOBJ *pfo,
2314 _In_ CLIPOBJ *pco,
2315 _Null_ RECTL *prclExtra,
2316 _In_opt_ RECTL *prclOpaque,
2317 _In_ BRUSHOBJ *pboFore,
2318 _In_ BRUSHOBJ *pboOpaque,
2319 _In_ POINTL *pptlOrg,
2320 _In_ MIX mix);
2321
2322 ENGAPI
2323 BOOL
2324 APIENTRY
2325 EngTransparentBlt(
2326 _In_ SURFOBJ *psoDst,
2327 _In_ SURFOBJ *psoSrc,
2328 _In_opt_ CLIPOBJ *pco,
2329 _In_opt_ XLATEOBJ *pxlo,
2330 _In_ RECTL *prclDst,
2331 _In_ RECTL *prclSrc,
2332 _In_ ULONG iTransColor,
2333 _In_ ULONG ulReserved);
2334
2335 ENGAPI
2336 VOID
2337 APIENTRY
2338 EngUnicodeToMultiByteN(
2339 _Out_writes_bytes_to_(cjMultiByteBuf, *pcjMultiByteString) PCHAR pchMultiByteString,
2340 _In_ ULONG cjMultiByteBuf,
2341 _Out_opt_ PULONG pcjMultiByteString,
2342 _In_reads_bytes_(cjUnicodeString) PWSTR pwszUnicodeString,
2343 _In_ ULONG cjUnicodeString);
2344
2345 ENGAPI
2346 VOID
2347 APIENTRY
2348 EngUnloadImage(
2349 _In_ HANDLE hModule);
2350
2351 ENGAPI
2352 BOOL
2353 APIENTRY
2354 EngUnlockDirectDrawSurface(
2355 _In_ PDD_SURFACE_LOCAL pSurface);
2356
2357 ENGAPI
2358 BOOL
2359 APIENTRY
2360 EngUnlockDriverObj(
2361 _In_ _Post_ptr_invalid_ HDRVOBJ hdo);
2362
2363 ENGAPI
2364 VOID
2365 APIENTRY
2366 EngUnlockSurface(
2367 _In_ _Post_ptr_invalid_ SURFOBJ *pso);
2368
2369 ENGAPI
2370 BOOL
2371 APIENTRY
2372 EngUnmapEvent(
2373 _In_ PEVENT pEvent);
2374
2375 ENGAPI
2376 BOOL
2377 APIENTRY
2378 EngUnmapFile(
2379 _In_ ULONG_PTR iFile);
2380
2381 ENGAPI
2382 VOID
2383 APIENTRY
2384 EngUnmapFontFile(
2385 _In_ ULONG_PTR iFile);
2386
2387 ENGAPI
2388 VOID
2389 APIENTRY
2390 EngUnmapFontFileFD(
2391 _In_ ULONG_PTR iFile);
2392
2393 ENGAPI
2394 VOID
2395 APIENTRY
2396 EngUnsecureMem(
2397 _In_ HANDLE hSecure);
2398
2399 ENGAPI
2400 BOOL
2401 APIENTRY
2402 EngWaitForSingleObject(
2403 _In_ PEVENT pEvent,
2404 _In_opt_ PLARGE_INTEGER pTimeOut);
2405
2406 ENGAPI
2407 INT
2408 APIENTRY
2409 EngWideCharToMultiByte(
2410 _In_ UINT CodePage,
2411 _In_reads_bytes_opt_(cjWideCharString) LPWSTR pwszWideCharString,
2412 _In_ INT cjWideCharString,
2413 _Out_z_bytecap_(cjMultiByteString) LPSTR pszMultiByteString,
2414 _In_ INT cjMultiByteString);
2415
2416 ENGAPI
2417 BOOL
2418 APIENTRY
2419 EngWritePrinter(
2420 _In_ HANDLE hPrinter,
2421 _In_reads_bytes_(cjBuf) LPVOID pvBuf,
2422 _In_ DWORD cjBuf,
2423 _Out_ LPDWORD pcWritten);
2424
2425 #if defined(_X86_) && !defined(USERMODE_DRIVER)
2426 ENGAPI
2427 VOID
2428 APIENTRY
2429 FLOATOBJ_Add(
2430 _Inout_ PFLOATOBJ pf,
2431 _In_ PFLOATOBJ pf1);
2432
2433 ENGAPI
2434 VOID
2435 APIENTRY
2436 FLOATOBJ_AddFloat(
2437 _Inout_ PFLOATOBJ pf,
2438 _In_ FLOATL f);
2439
2440 ENGAPI
2441 VOID
2442 APIENTRY
2443 FLOATOBJ_AddLong(
2444 _Inout_ PFLOATOBJ pf,
2445 _In_ LONG l);
2446
2447 ENGAPI
2448 VOID
2449 APIENTRY
2450 FLOATOBJ_Div(
2451 _Inout_ PFLOATOBJ pf,
2452 _In_ PFLOATOBJ pf1);
2453
2454 ENGAPI
2455 VOID
2456 APIENTRY
2457 FLOATOBJ_DivFloat(
2458 _Inout_ PFLOATOBJ pf,
2459 _In_ FLOATL f);
2460
2461 ENGAPI
2462 VOID
2463 APIENTRY
2464 FLOATOBJ_DivLong(
2465 _Inout_ PFLOATOBJ pf,
2466 _In_ LONG l);
2467
2468 ENGAPI
2469 BOOL
2470 APIENTRY
2471 FLOATOBJ_Equal(
2472 _In_ PFLOATOBJ pf,
2473 _In_ PFLOATOBJ pf1);
2474
2475 ENGAPI
2476 BOOL
2477 APIENTRY
2478 FLOATOBJ_EqualLong(
2479 _In_ PFLOATOBJ pf,
2480 _In_ LONG l);
2481
2482 ENGAPI
2483 LONG
2484 APIENTRY
2485 FLOATOBJ_GetFloat(
2486 _In_ PFLOATOBJ pf);
2487
2488 ENGAPI
2489 LONG
2490 APIENTRY
2491 FLOATOBJ_GetLong(
2492 _In_ PFLOATOBJ pf);
2493
2494 ENGAPI
2495 BOOL
2496 APIENTRY
2497 FLOATOBJ_GreaterThan(
2498 _In_ PFLOATOBJ pf,
2499 _In_ PFLOATOBJ pf1);
2500
2501 ENGAPI
2502 BOOL
2503 APIENTRY
2504 FLOATOBJ_GreaterThanLong(
2505 _In_ PFLOATOBJ pf,
2506 _In_ LONG l);
2507
2508 ENGAPI
2509 BOOL
2510 APIENTRY
2511 FLOATOBJ_LessThan(
2512 _In_ PFLOATOBJ pf,
2513 _In_ PFLOATOBJ pf1);
2514
2515 ENGAPI
2516 BOOL
2517 APIENTRY
2518 FLOATOBJ_LessThanLong(
2519 _In_ PFLOATOBJ pf,
2520 _In_ LONG l);
2521
2522 ENGAPI
2523 VOID
2524 APIENTRY
2525 FLOATOBJ_Mul(
2526 _Inout_ PFLOATOBJ pf,
2527 _In_ PFLOATOBJ pf1);
2528
2529 ENGAPI
2530 VOID
2531 APIENTRY
2532 FLOATOBJ_MulFloat(
2533 _Inout_ PFLOATOBJ pf,
2534 _In_ FLOATL f);
2535
2536 ENGAPI
2537 VOID
2538 APIENTRY
2539 FLOATOBJ_MulLong(
2540 _Inout_ PFLOATOBJ pf,
2541 _In_ LONG l);
2542
2543 ENGAPI
2544 VOID
2545 APIENTRY
2546 FLOATOBJ_Neg(
2547 _Inout_ PFLOATOBJ pf);
2548
2549 ENGAPI
2550 VOID
2551 APIENTRY
2552 FLOATOBJ_SetFloat(
2553 _Out_ PFLOATOBJ pf,
2554 _In_ FLOATL f);
2555
2556 ENGAPI
2557 VOID
2558 APIENTRY
2559 FLOATOBJ_SetLong(
2560 _Out_ PFLOATOBJ pf,
2561 _In_ LONG l);
2562
2563 ENGAPI
2564 VOID
2565 APIENTRY
2566 FLOATOBJ_Sub(
2567 _Inout_ PFLOATOBJ pf,
2568 _In_ PFLOATOBJ pf1);
2569
2570 ENGAPI
2571 VOID
2572 APIENTRY
2573 FLOATOBJ_SubFloat(
2574 _Inout_ PFLOATOBJ pf,
2575 _In_ FLOATL f);
2576
2577 ENGAPI
2578 VOID
2579 APIENTRY
2580 FLOATOBJ_SubLong(
2581 _Inout_ PFLOATOBJ pf,
2582 _In_ LONG l);
2583
2584 #else
2585
2586 #define FLOATOBJ_SetFloat(pf, f) {*(pf) = (f);}
2587 #define FLOATOBJ_SetLong(pf, l) {*(pf) = (FLOAT)(l);}
2588 #define FLOATOBJ_GetFloat(pf) (*(PULONG)(pf))
2589 #define FLOATOBJ_GetLong(pf) ((LONG)*(pf))
2590 #define FLOATOBJ_Add(pf, pf1) {*(pf) += *(pf1);}
2591 #define FLOATOBJ_AddFloat(pf, f) {*(pf) += (f);}
2592 #define FLOATOBJ_AddLong(pf, l) {*(pf) += (l);}
2593 #define FLOATOBJ_Sub(pf, pf1) {*(pf) -= *(pf1);}
2594 #define FLOATOBJ_SubFloat(pf, f) {*(pf) -= (f);}
2595 #define FLOATOBJ_SubLong(pf, l) {*(pf) -= (l);}
2596 #define FLOATOBJ_Mul(pf, pf1) {*(pf) *= *(pf1);}
2597 #define FLOATOBJ_MulFloat(pf, f) {*(pf) *= (f);}
2598 #define FLOATOBJ_MulLong(pf, l) {*(pf) *= (l);}
2599 #define FLOATOBJ_Div(pf, pf1) {*(pf) /= *(pf1);}
2600 #define FLOATOBJ_DivFloat(pf, f) {*(pf) /= (f);}
2601 #define FLOATOBJ_DivLong(pf, l) {*(pf) /= (l);}
2602 #define FLOATOBJ_Neg(pf) {*(pf) = -(*(pf));}
2603 #define FLOATOBJ_Equal(pf, pf1) (*(pf) == *(pf1))
2604 #define FLOATOBJ_GreaterThan(pf, pf1) (*(pf) > *(pf1))
2605 #define FLOATOBJ_LessThan(pf, pf1) (*(pf) < *(pf1))
2606 #define FLOATOBJ_EqualLong(pf, l) (*(pf) == (FLOAT)(l))
2607 #define FLOATOBJ_GreaterThanLong(pf, l) (*(pf) > (FLOAT)(l))
2608 #define FLOATOBJ_LessThanLong(pf, l) (*(pf) < (FLOAT)(l))
2609
2610 #endif
2611
2612 ENGAPI
2613 ULONG
2614 APIENTRY
2615 FONTOBJ_cGetAllGlyphHandles(
2616 _In_ FONTOBJ *pfo,
2617 _Out_opt_ HGLYPH *phg);
2618
2619 ENGAPI
2620 ULONG
2621 APIENTRY
2622 FONTOBJ_cGetGlyphs(
2623 _In_ FONTOBJ *pfo,
2624 _In_ ULONG iMode,
2625 _In_ ULONG cGlyph,
2626 _In_count_(cGlyph) HGLYPH *phg,
2627 _Out_ PVOID *ppvGlyph);
2628
2629 ENGAPI
2630 FD_GLYPHSET*
2631 APIENTRY
2632 FONTOBJ_pfdg(
2633 _In_ FONTOBJ *pfo);
2634
2635 ENGAPI
2636 IFIMETRICS*
2637 APIENTRY
2638 FONTOBJ_pifi(
2639 _In_ FONTOBJ *pfo);
2640
2641 _Ret_opt_bytecount_(*pcjTable)
2642 ENGAPI
2643 PBYTE
2644 APIENTRY
2645 FONTOBJ_pjOpenTypeTablePointer(
2646 _In_ FONTOBJ *pfo,
2647 _In_ ULONG ulTag,
2648 _Out_ ULONG *pcjTable);
2649
2650 ENGAPI
2651 PFD_GLYPHATTR
2652 APIENTRY
2653 FONTOBJ_pQueryGlyphAttrs(
2654 _In_ FONTOBJ *pfo,
2655 _In_ ULONG iMode);
2656
2657 _Ret_opt_bytecount_(*pcjFile)
2658 ENGAPI
2659 PVOID
2660 APIENTRY
2661 FONTOBJ_pvTrueTypeFontFile(
2662 _In_ FONTOBJ *pfo,
2663 _Out_ ULONG *pcjFile);
2664
2665 ENGAPI
2666 LPWSTR
2667 APIENTRY
2668 FONTOBJ_pwszFontFilePaths(
2669 _In_ FONTOBJ *pfo,
2670 _Out_ ULONG *pcwc);
2671
2672 ENGAPI
2673 XFORMOBJ*
2674 APIENTRY
2675 FONTOBJ_pxoGetXform(
2676 _In_ FONTOBJ *pfo);
2677
2678 ENGAPI
2679 VOID
2680 APIENTRY
2681 FONTOBJ_vGetInfo(
2682 _In_ FONTOBJ *pfo,
2683 _In_ ULONG cjSize,
2684 _Out_bytecap_(cjSize) FONTINFO *pfi);
2685
2686 #if (NTDDI_VERSION <= NTDDI_WINXP)
2687 GAMMA_TABLES*
2688 APIENTRY
2689 FONTOBJ_pGetGammaTables(
2690 _In_ FONTOBJ *pfo);
2691 #endif
2692
2693 ENGAPI
2694 LONG
2695 APIENTRY
2696 HT_ComputeRGBGammaTable(
2697 _In_ USHORT GammaTableEntries,
2698 _In_ USHORT GammaTableType,
2699 _In_ USHORT RedGamma,
2700 _In_ USHORT GreenGamma,
2701 _In_ USHORT BlueGamma,
2702 _Out_writes_bytes_(GammaTableEntries * 3) LPBYTE pGammaTable);
2703
2704 ENGAPI
2705 LONG
2706 APIENTRY
2707 HT_Get8BPPFormatPalette(
2708 _Out_opt_ LPPALETTEENTRY pPaletteEntry,
2709 _In_ USHORT RedGamma,
2710 _In_ USHORT GreenGamma,
2711 _In_ USHORT BlueGamma);
2712
2713 ENGAPI
2714 LONG
2715 APIENTRY
2716 HT_Get8BPPMaskPalette(
2717 _Out_opt_ LPPALETTEENTRY pPaletteEntry,
2718 _In_ BOOL Use8BPPMaskPal,
2719 _In_ BYTE CMYMask,
2720 _In_ USHORT RedGamma,
2721 _In_ USHORT GreenGamma,
2722 _In_ USHORT BlueGamma);
2723
2724 ENGAPI
2725 LONG
2726 APIENTRY
2727 HTUI_DeviceColorAdjustment(
2728 _In_ LPSTR pDeviceName,
2729 _Out_ PDEVHTADJDATA pDevHTAdjData);
2730
2731 ENGAPI
2732 ULONG
2733 APIENTRY
2734 PALOBJ_cGetColors(
2735 _In_ PALOBJ *ppalo,
2736 _In_ ULONG iStart,
2737 _In_ ULONG cColors,
2738 _Out_writes_(cColors) ULONG *pulColors);
2739
2740 ENGAPI
2741 BOOL
2742 APIENTRY
2743 PATHOBJ_bCloseFigure(
2744 _In_ PATHOBJ *ppo);
2745
2746 ENGAPI
2747 BOOL
2748 APIENTRY
2749 PATHOBJ_bEnum(
2750 _In_ PATHOBJ *ppo,
2751 _Out_ PATHDATA *ppd);
2752
2753 ENGAPI
2754 BOOL
2755 APIENTRY
2756 PATHOBJ_bEnumClipLines(
2757 _In_ PATHOBJ *ppo,
2758 _In_ ULONG cj,
2759 _Out_bytecap_(cj) CLIPLINE *pcl);
2760
2761 ENGAPI
2762 BOOL
2763 APIENTRY
2764 PATHOBJ_bMoveTo(
2765 _In_ PATHOBJ *ppo,
2766 _In_ POINTFIX ptfx);
2767
2768 ENGAPI
2769 BOOL
2770 APIENTRY
2771 PATHOBJ_bPolyBezierTo(
2772 _In_ PATHOBJ *ppo,
2773 _In_count_(cptfx) POINTFIX *pptfx,
2774 _In_ ULONG cptfx);
2775
2776 ENGAPI
2777 BOOL
2778 APIENTRY
2779 PATHOBJ_bPolyLineTo(
2780 _In_ PATHOBJ *ppo,
2781 _In_count_(cptfx) POINTFIX *pptfx,
2782 _In_ ULONG cptfx);
2783
2784 ENGAPI
2785 VOID
2786 APIENTRY
2787 PATHOBJ_vEnumStart(
2788 _Inout_ PATHOBJ *ppo);
2789
2790 ENGAPI
2791 VOID
2792 APIENTRY
2793 PATHOBJ_vEnumStartClipLines(
2794 _Inout_ PATHOBJ *ppo,
2795 _In_ CLIPOBJ *pco,
2796 _In_ SURFOBJ *pso,
2797 _In_ LINEATTRS *pla);
2798
2799 ENGAPI
2800 VOID
2801 APIENTRY
2802 PATHOBJ_vGetBounds(
2803 _In_ PATHOBJ *ppo,
2804 _Out_ PRECTFX prectfx);
2805
2806 ENGAPI
2807 BOOL
2808 APIENTRY
2809 STROBJ_bEnum(
2810 _Inout_ STROBJ *pstro,
2811 _Out_ ULONG *pc,
2812 _Out_ PGLYPHPOS *ppgpos); // FIXME_ size?
2813
2814 ENGAPI
2815 BOOL
2816 APIENTRY
2817 STROBJ_bEnumPositionsOnly(
2818 _In_ STROBJ *pstro,
2819 _Out_ ULONG *pc,
2820 _Out_ PGLYPHPOS *ppgpos); // FIXME_ size?
2821
2822 ENGAPI
2823 BOOL
2824 APIENTRY
2825 STROBJ_bGetAdvanceWidths(
2826 _In_ STROBJ *pso,
2827 _In_ ULONG iFirst,
2828 _In_ ULONG c,
2829 _Out_cap_(c) POINTQF *pptqD);
2830
2831 ENGAPI
2832 DWORD
2833 APIENTRY
2834 STROBJ_dwGetCodePage(
2835 _In_ STROBJ *pstro);
2836
2837 ENGAPI
2838 FIX
2839 APIENTRY
2840 STROBJ_fxBreakExtra(
2841 _In_ STROBJ *pstro);
2842
2843 ENGAPI
2844 FIX
2845 APIENTRY
2846 STROBJ_fxCharacterExtra(
2847 _In_ STROBJ *pstro);
2848
2849 ENGAPI
2850 VOID
2851 APIENTRY
2852 STROBJ_vEnumStart(
2853 _Inout_ STROBJ *pstro);
2854
2855 ENGAPI
2856 BOOL
2857 APIENTRY
2858 WNDOBJ_bEnum(
2859 _Inout_ WNDOBJ *pwo,
2860 _In_ ULONG cj,
2861 _Out_bytecap_(cj) ULONG *pul);
2862
2863 ENGAPI
2864 ULONG
2865 APIENTRY
2866 WNDOBJ_cEnumStart(
2867 _Inout_ WNDOBJ *pwo,
2868 _In_ ULONG iType,
2869 _In_ ULONG iDirection,
2870 _In_ ULONG cLimit);
2871
2872 ENGAPI
2873 VOID
2874 APIENTRY
2875 WNDOBJ_vSetConsumer(
2876 _Inout_ WNDOBJ *pwo,
2877 _In_ PVOID pvConsumer);
2878
2879 /* XFORMOBJ_bApplyXform.iMode constants */
2880 #define XF_LTOL 0L
2881 #define XF_INV_LTOL 1L
2882 #define XF_LTOFX 2L
2883 #define XF_INV_FXTOL 3L
2884
2885 ENGAPI
2886 BOOL
2887 APIENTRY
2888 XFORMOBJ_bApplyXform(
2889 _In_ XFORMOBJ *pxo,
2890 _In_ ULONG iMode,
2891 _In_ ULONG cPoints,
2892 _In_reads_bytes_(cPoints * sizeof(POINTL)) PVOID pvIn,
2893 _Out_writes_bytes_(cPoints * sizeof(POINTL)) PVOID pvOut);
2894
2895 #if !defined(USERMODE_DRIVER)
2896 ENGAPI
2897 ULONG
2898 APIENTRY
2899 XFORMOBJ_iGetFloatObjXform(
2900 _In_ XFORMOBJ *pxo,
2901 _Out_ FLOATOBJ_XFORM *pxfo);
2902 #else
2903 #define XFORMOBJ_iGetFloatObjXform XFORMOBJ_iGetXform
2904 #endif
2905
2906 ENGAPI
2907 ULONG
2908 APIENTRY
2909 XFORMOBJ_iGetXform(
2910 _In_ XFORMOBJ *pxo,
2911 _Out_ XFORML *pxform);
2912
2913 /* XLATEOBJ_cGetPalette.iPal constants */
2914 #define XO_SRCPALETTE 1
2915 #define XO_DESTPALETTE 2
2916 #define XO_DESTDCPALETTE 3
2917 #define XO_SRCBITFIELDS 4
2918 #define XO_DESTBITFIELDS 5
2919
2920 ENGAPI
2921 ULONG
2922 APIENTRY
2923 XLATEOBJ_cGetPalette(
2924 _In_ XLATEOBJ *pxlo,
2925 _In_ ULONG iPal,
2926 _In_ ULONG cPal,
2927 _Out_cap_(cPal) ULONG *pPal);
2928
2929 ENGAPI
2930 HANDLE
2931 APIENTRY
2932 XLATEOBJ_hGetColorTransform(
2933 _In_ XLATEOBJ *pxlo);
2934
2935 ENGAPI
2936 ULONG
2937 APIENTRY
2938 XLATEOBJ_iXlate(
2939 _In_ XLATEOBJ *pxlo,
2940 _In_ ULONG iColor);
2941
2942 ENGAPI
2943 ULONG*
2944 APIENTRY
2945 XLATEOBJ_piVector(
2946 _In_ XLATEOBJ *pxlo);
2947
2948
2949 /* Graphics Driver Functions */
2950
2951 typedef BOOL
2952 (APIENTRY FN_DrvAlphaBlend)(
2953 _Inout_ SURFOBJ *psoDest,
2954 _In_ SURFOBJ *psoSrc,
2955 _In_ CLIPOBJ *pco,
2956 _In_opt_ XLATEOBJ *pxlo,
2957 _In_ RECTL *prclDest,
2958 _In_ RECTL *prclSrc,
2959 _In_ BLENDOBJ *pBlendObj);
2960 typedef FN_DrvAlphaBlend *PFN_DrvAlphaBlend;
2961 extern FN_DrvAlphaBlend DrvAlphaBlend;
2962
2963 typedef BOOL
2964 (APIENTRY FN_DrvAssertMode)(
2965 _In_ DHPDEV dhpdev,
2966 _In_ BOOL bEnable);
2967 typedef FN_DrvAssertMode *PFN_DrvAssertMode;
2968 extern FN_DrvAssertMode DrvAssertMode;
2969
2970 typedef BOOL
2971 (APIENTRY FN_DrvBitBlt)(
2972 _Inout_ SURFOBJ *psoTrg,
2973 _In_opt_ SURFOBJ *psoSrc,
2974 _In_opt_ SURFOBJ *psoMask,
2975 _In_ CLIPOBJ *pco,
2976 _In_opt_ XLATEOBJ *pxlo,
2977 _In_ RECTL *prclTrg,
2978 _In_opt_ POINTL *pptlSrc,
2979 _In_opt_ POINTL *pptlMask,
2980 _In_opt_ BRUSHOBJ *pbo,
2981 _In_opt_ POINTL *pptlBrush,
2982 _In_ ROP4 rop4);
2983 typedef FN_DrvBitBlt *PFN_DrvBitBlt;
2984 extern FN_DrvBitBlt DrvBitBlt;
2985
2986 typedef VOID
2987 (APIENTRY FN_DrvCompletePDEV)(
2988 _In_ DHPDEV dhpdev,
2989 _In_ HDEV hdev);
2990 typedef FN_DrvCompletePDEV *PFN_DrvCompletePDEV;
2991 extern FN_DrvCompletePDEV DrvCompletePDEV;
2992
2993 typedef BOOL
2994 (APIENTRY FN_DrvCopyBits)(
2995 _In_ SURFOBJ *psoDest,
2996 _In_ SURFOBJ *psoSrc,
2997 _In_ CLIPOBJ *pco,
2998 _In_opt_ XLATEOBJ *pxlo,
2999 _In_ RECTL *prclDest,
3000 _In_ POINTL *pptlSrc);
3001 typedef FN_DrvCopyBits *PFN_DrvCopyBits;
3002 extern FN_DrvCopyBits DrvCopyBits;
3003
3004 typedef HBITMAP
3005 (APIENTRY FN_DrvCreateDeviceBitmap)(
3006 _In_ DHPDEV dhpdev,
3007 _In_ SIZEL sizl,
3008 _In_ ULONG iFormat);
3009 typedef FN_DrvCreateDeviceBitmap *PFN_DrvCreateDeviceBitmap;
3010 extern FN_DrvCreateDeviceBitmap DrvCreateDeviceBitmap;
3011
3012 typedef VOID
3013 (APIENTRY FN_DrvDeleteDeviceBitmap)(
3014 _In_ _Post_ptr_invalid_ DHSURF dhsurf);
3015 typedef FN_DrvDeleteDeviceBitmap *PFN_DrvDeleteDeviceBitmap;
3016 extern FN_DrvDeleteDeviceBitmap DrvDeleteDeviceBitmap;
3017
3018 typedef HBITMAP
3019 (APIENTRY FN_DrvDeriveSurface)(
3020 _In_ DD_DIRECTDRAW_GLOBAL *pDirectDraw,
3021 _In_ DD_SURFACE_LOCAL *pSurface);
3022 typedef FN_DrvDeriveSurface *PFN_DrvDeriveSurface;
3023 extern FN_DrvDeriveSurface DrvDeriveSurface;
3024
3025 typedef LONG
3026 (APIENTRY FN_DrvDescribePixelFormat)(
3027 _In_ DHPDEV dhpdev,
3028 _In_ LONG iPixelFormat,
3029 _In_ ULONG cjpfd,
3030 _Out_opt_ PIXELFORMATDESCRIPTOR *ppfd);
3031 typedef FN_DrvDescribePixelFormat *PFN_DrvDescribePixelFormat;
3032 extern FN_DrvDescribePixelFormat DrvDescribePixelFormat;
3033
3034 typedef VOID
3035 (APIENTRY FN_DrvDestroyFont)(
3036 _In_ FONTOBJ *pfo);
3037 typedef FN_DrvDestroyFont *PFN_DrvDestroyFont;
3038 extern FN_DrvDestroyFont DrvDestroyFont;
3039
3040 typedef VOID
3041 (APIENTRY FN_DrvDisableDriver)(VOID);
3042 typedef FN_DrvDisableDriver *PFN_DrvDisableDriver;
3043 extern FN_DrvDisableDriver DrvDisableDriver;
3044
3045 typedef VOID
3046 (APIENTRY FN_DrvDisablePDEV)(
3047 _In_ DHPDEV dhpdev);
3048 typedef FN_DrvDisablePDEV *PFN_DrvDisablePDEV;
3049 extern FN_DrvDisablePDEV DrvDisablePDEV;
3050
3051 typedef VOID
3052 (APIENTRY FN_DrvDisableSurface)(
3053 _In_ DHPDEV dhpdev);
3054 typedef FN_DrvDisableSurface *PFN_DrvDisableSurface;
3055 extern FN_DrvDisableSurface DrvDisableSurface;
3056
3057 typedef ULONG
3058 (APIENTRY FN_DrvDitherColor)(
3059 _In_ DHPDEV dhpdev,
3060 _In_ ULONG iMode,
3061 _In_ ULONG rgb,
3062 _Inout_updates_(8 * 8) ULONG *pul); // FIXME: compare EngDitherColor
3063 typedef FN_DrvDitherColor *PFN_DrvDitherColor;
3064 extern FN_DrvDitherColor DrvDitherColor;
3065
3066 typedef ULONG
3067 (APIENTRY FN_DrvDrawEscape)(
3068 _In_ SURFOBJ *pso,
3069 _In_ ULONG iEsc,
3070 _In_ CLIPOBJ *pco,
3071 _In_ RECTL *prcl,
3072 _In_ ULONG cjIn,
3073 _In_reads_bytes_(cjIn) PVOID pvIn);
3074 typedef FN_DrvDrawEscape *PFN_DrvDrawEscape;
3075 extern FN_DrvDrawEscape DrvDrawEscape;
3076
3077 typedef BOOL
3078 (APIENTRY FN_DrvEnableDriver)(
3079 _In_ ULONG iEngineVersion,
3080 _In_ ULONG cj,
3081 _Inout_bytecount_(cj) DRVENABLEDATA *pded); // Zero initialized
3082 typedef FN_DrvEnableDriver *PFN_DrvEnableDriver;
3083 extern FN_DrvEnableDriver DrvEnableDriver;
3084
3085 typedef DHPDEV
3086 (APIENTRY FN_DrvEnablePDEV)(
3087 _In_ DEVMODEW *pdm,
3088 _In_ LPWSTR pwszLogAddress,
3089 _In_ ULONG cPat,
3090 _Out_opt_cap_(cPat) HSURF *phsurfPatterns,
3091 _In_ ULONG cjCaps,
3092 _Out_bytecap_(cjCaps) ULONG *pdevcaps,
3093 _In_ ULONG cjDevInfo,
3094 _Out_ DEVINFO *pdi,
3095 _In_ HDEV hdev,
3096 _In_ LPWSTR pwszDeviceName,
3097 _In_ HANDLE hDriver);
3098 typedef FN_DrvEnablePDEV *PFN_DrvEnablePDEV;
3099 extern FN_DrvEnablePDEV DrvEnablePDEV;
3100
3101 typedef HSURF
3102 (APIENTRY FN_DrvEnableSurface)(
3103 _In_ DHPDEV dhpdev);
3104 typedef FN_DrvEnableSurface *PFN_DrvEnableSurface;
3105 extern FN_DrvEnableSurface DrvEnableSurface;
3106
3107 /* DrvEndDoc.fl constants */
3108 #define ED_ABORTDOC 0x00000001
3109
3110 typedef BOOL
3111 (APIENTRY FN_DrvEndDoc)(
3112 _In_ SURFOBJ *pso,
3113 _In_ FLONG fl);
3114 typedef FN_DrvEndDoc *PFN_DrvEndDoc;
3115 extern FN_DrvEndDoc DrvEndDoc;
3116
3117 typedef ULONG
3118 (APIENTRY FN_DrvEscape)(
3119 _In_ SURFOBJ *pso,
3120 _In_ ULONG iEsc,
3121 _In_ ULONG cjIn,
3122 _In_bytecount_(cjIn) PVOID pvIn,
3123 _In_ ULONG cjOut,
3124 _Out_bytecap_(cjOut) PVOID pvOut);
3125 typedef FN_DrvEscape *PFN_DrvEscape;
3126 extern FN_DrvEscape DrvEscape;
3127
3128 typedef BOOL
3129 (APIENTRY FN_DrvFillPath)(
3130 _Inout_ SURFOBJ *pso,
3131 _In_ PATHOBJ *ppo,
3132 _In_ CLIPOBJ *pco,
3133 _In_ BRUSHOBJ *pbo,
3134 _In_ POINTL *pptlBrushOrg,
3135 _In_ MIX mix,
3136 _In_ FLONG flOptions);
3137 typedef FN_DrvFillPath *PFN_DrvFillPath;
3138 extern FN_DrvFillPath DrvFillPath;
3139
3140 typedef ULONG
3141 (APIENTRY FN_DrvFontManagement)(
3142 _In_ SURFOBJ *pso,
3143 _In_opt_ FONTOBJ *pfo,
3144 _In_ ULONG iMode,
3145 _In_ ULONG cjIn,
3146 _In_bytecount_(cjIn) PVOID pvIn,
3147 _In_ ULONG cjOut,
3148 _Out_bytecap_(cjOut) PVOID pvOut);
3149 typedef FN_DrvFontManagement *PFN_DrvFontManagement;
3150 extern FN_DrvFontManagement DrvFontManagement;
3151
3152 typedef VOID
3153 (APIENTRY FN_DrvFree)(
3154 _In_ _Post_ptr_invalid_ PVOID pv,
3155 _In_ ULONG_PTR id);
3156 typedef FN_DrvFree *PFN_DrvFree;
3157 extern FN_DrvFree DrvFree;
3158
3159 /* DrvGetGlyphMode return values */
3160 #define FO_HGLYPHS 0L
3161 #define FO_GLYPHBITS 1L
3162 #define FO_PATHOBJ 2L
3163
3164 typedef ULONG
3165 (APIENTRY FN_DrvGetGlyphMode)(
3166 _In_ DHPDEV dhpdev,
3167 _In_ FONTOBJ *pfo);
3168 typedef FN_DrvGetGlyphMode *PFN_DrvGetGlyphMode;
3169 extern FN_DrvGetGlyphMode DrvGetGlyphMode;
3170
3171 typedef ULONG
3172 (APIENTRY FN_DrvGetModes)(
3173 _In_ HANDLE hDriver,
3174 _In_ ULONG cjSize,
3175 _Out_opt_bytecap_(cjSize) DEVMODEW *pdm);
3176 typedef FN_DrvGetModes *PFN_DrvGetModes;
3177 extern FN_DrvGetModes DrvGetModes;
3178
3179 typedef PVOID
3180 (APIENTRY FN_DrvGetTrueTypeFile)(
3181 _In_ ULONG_PTR iFile,
3182 _In_ ULONG *pcj);
3183 typedef FN_DrvGetTrueTypeFile *PFN_DrvGetTrueTypeFile;
3184 extern FN_DrvGetTrueTypeFile DrvGetTrueTypeFile;
3185
3186 typedef BOOL
3187 (APIENTRY FN_DrvGradientFill)(
3188 _Inout_ SURFOBJ *psoDest,
3189 _In_ CLIPOBJ *pco,
3190 _In_opt_ XLATEOBJ *pxlo,
3191 _In_ TRIVERTEX *pVertex,
3192 _In_ ULONG nVertex,
3193 _In_ PVOID pMesh,
3194 _In_ ULONG nMesh,
3195 _In_ RECTL *prclExtents,
3196 _In_ POINTL *pptlDitherOrg,
3197 _In_ ULONG ulMode);
3198 typedef FN_DrvGradientFill *PFN_DrvGradientFill;
3199 extern FN_DrvGradientFill DrvGradientFill;
3200
3201 typedef BOOL
3202 (APIENTRY FN_DrvIcmCheckBitmapBits)(
3203 _In_ DHPDEV dhpdev,
3204 _In_ HANDLE hColorTransform,
3205 _In_ SURFOBJ *pso,
3206 _Out_bytecap_(pso->sizlBitmap.cx * pso->sizlBitmap.cy) PBYTE paResults);
3207 typedef FN_DrvIcmCheckBitmapBits *PFN_DrvIcmCheckBitmapBits;
3208 extern FN_DrvIcmCheckBitmapBits DrvIcmCheckBitmapBits;
3209
3210 typedef HANDLE
3211 (APIENTRY FN_DrvIcmCreateColorTransform)(
3212 _In_ DHPDEV dhpdev,
3213 _In_ LPLOGCOLORSPACEW pLogColorSpace,
3214 _In_reads_bytes_opt_(cjSourceProfile) PVOID pvSourceProfile,
3215 _In_ ULONG cjSourceProfile,
3216 _In_reads_bytes_(cjDestProfile) PVOID pvDestProfile,
3217 _In_ ULONG cjDestProfile,
3218 _In_reads_bytes_opt_(cjTargetProfile) PVOID pvTargetProfile,
3219 _In_ ULONG cjTargetProfile,
3220 _In_ DWORD dwReserved);
3221 typedef FN_DrvIcmCreateColorTransform *PFN_DrvIcmCreateColorTransform;
3222 extern FN_DrvIcmCreateColorTransform DrvIcmCreateColorTransform;
3223
3224 typedef BOOL
3225 (APIENTRY FN_DrvIcmDeleteColorTransform)(
3226 _In_ DHPDEV dhpdev,
3227 _In_ HANDLE hcmXform);
3228 typedef FN_DrvIcmDeleteColorTransform *PFN_DrvIcmDeleteColorTransform;
3229 extern FN_DrvIcmDeleteColorTransform DrvIcmDeleteColorTransform;
3230
3231 /* DrvIcmSetDeviceGammaRamp.iFormat constants */
3232 #define IGRF_RGB_256BYTES 0x00000000
3233 #define IGRF_RGB_256WORDS 0x00000001
3234
3235 typedef BOOL
3236 (APIENTRY FN_DrvIcmSetDeviceGammaRamp)(
3237 _In_ DHPDEV dhpdev,
3238 _In_ ULONG iFormat,
3239 _In_bytecount_(sizeof(GAMMARAMP)) LPVOID lpRamp);
3240 typedef FN_DrvIcmSetDeviceGammaRamp *PFN_DrvIcmSetDeviceGammaRamp;
3241 extern FN_DrvIcmSetDeviceGammaRamp DrvIcmSetDeviceGammaRamp;
3242
3243 typedef BOOL
3244 (APIENTRY FN_DrvLineTo)(
3245 _Inout_ SURFOBJ *pso,
3246 _In_ CLIPOBJ *pco,
3247 _In_ BRUSHOBJ *pbo,
3248 _In_ LONG x1,
3249 _In_ LONG y1,
3250 _In_ LONG x2,
3251 _In_ LONG y2,
3252 _In_opt_ RECTL *prclBounds,
3253 _In_ MIX mix);
3254 typedef FN_DrvLineTo *PFN_DrvLineTo;
3255 extern FN_DrvLineTo DrvLineTo;
3256
3257 typedef ULONG_PTR
3258 (APIENTRY FN_DrvLoadFontFile)(
3259 _In_ ULONG cFiles,
3260 _In_ ULONG_PTR *piFile,
3261 _In_count_(cFiles) PVOID *ppvView,
3262 _In_count_(cFiles) ULONG *pcjView,
3263 _In_opt_ DESIGNVECTOR *pdv,
3264 _In_ ULONG ulLangID,
3265 _In_ ULONG ulFastCheckSum);
3266 typedef FN_DrvLoadFontFile *PFN_DrvLoadFontFile;
3267 extern FN_DrvLoadFontFile DrvLoadFontFile;
3268
3269 typedef VOID
3270 (APIENTRY FN_DrvMovePointer)(
3271 _In_ SURFOBJ *pso,
3272 _In_ LONG x,
3273 _In_ LONG y,
3274 _In_opt_ RECTL *prcl);
3275 typedef FN_DrvMovePointer *PFN_DrvMovePointer;
3276 extern FN_DrvMovePointer DrvMovePointer;
3277
3278 typedef BOOL
3279 (APIENTRY FN_DrvNextBand)(
3280 _In_ SURFOBJ *pso,
3281 _In_ POINTL *pptl);
3282 typedef FN_DrvNextBand *PFN_DrvNextBand;
3283 extern FN_DrvNextBand DrvNextBand;
3284
3285 typedef VOID
3286 (APIENTRY FN_DrvNotify)(
3287 _In_ SURFOBJ *pso,
3288 _In_ ULONG iType,
3289 _In_opt_ PVOID pvData);
3290 typedef FN_DrvNotify *PFN_DrvNotify;
3291 extern FN_DrvNotify DrvNotify;
3292
3293 typedef BOOL
3294 (APIENTRY FN_DrvOffset)(
3295 _In_ SURFOBJ *pso,
3296 _In_ LONG x,
3297 _In_ LONG y,
3298 _In_ FLONG flReserved);
3299 typedef FN_DrvOffset *PFN_DrvOffset;
3300 extern FN_DrvOffset DrvOffset;
3301
3302 typedef BOOL
3303 (APIENTRY FN_DrvPaint)(
3304 _Inout_ SURFOBJ *pso,
3305 _In_ CLIPOBJ *pco,
3306 _In_ BRUSHOBJ *pbo,
3307 _In_ POINTL *pptlBrushOrg,
3308 _In_ MIX mix);
3309 typedef FN_DrvPaint *PFN_DrvPaint;
3310 extern FN_DrvPaint DrvPaint;
3311
3312 typedef BOOL
3313 (APIENTRY FN_DrvPlgBlt)(
3314 _Inout_ SURFOBJ *psoTrg,
3315 _Inout_ SURFOBJ *psoSrc,
3316 _In_opt_ SURFOBJ *psoMsk,
3317 _In_ CLIPOBJ *pco,
3318 _In_opt_ XLATEOBJ *pxlo,
3319 _In_opt_ COLORADJUSTMENT *pca,
3320 _In_opt_ POINTL *pptlBrushOrg,
3321 _In_ POINTFIX *pptfx,
3322 _In_ RECTL *prcl,
3323 _In_opt_ POINTL *pptl,
3324 _In_ ULONG iMode);
3325 typedef FN_DrvPlgBlt *PFN_DrvPlgBlt;
3326 extern FN_DrvPlgBlt DrvPlgBlt;
3327
3328 /* DrvQueryAdvanceWidths.iMode constants */
3329 #define QAW_GETWIDTHS 0
3330 #define QAW_GETEASYWIDTHS 1
3331
3332 typedef BOOL
3333 (APIENTRY FN_DrvQueryAdvanceWidths)(
3334 _In_ DHPDEV dhpdev,
3335 _In_ FONTOBJ *pfo,
3336 _In_ ULONG iMode,
3337 _In_reads_(cGlyphs) HGLYPH *phg,
3338 _Out_writes_bytes_(cGlyphs * sizeof(USHORT)) PVOID pvWidths,
3339 _In_ ULONG cGlyphs);
3340 typedef FN_DrvQueryAdvanceWidths *PFN_DrvQueryAdvanceWidths;
3341 extern FN_DrvQueryAdvanceWidths DrvQueryAdvanceWidths;
3342
3343 /* DrvQueryDeviceSupport.iType constants */
3344 #define QDS_CHECKJPEGFORMAT 0x00000000
3345 #define QDS_CHECKPNGFORMAT 0x00000001
3346
3347 typedef BOOL
3348 (APIENTRY FN_DrvQueryDeviceSupport)(
3349 _In_ SURFOBJ *pso,
3350 _In_ XLATEOBJ *pxlo,
3351 _In_ XFORMOBJ *pxo,
3352 _In_ ULONG iType,
3353 _In_ ULONG cjIn,
3354 _In_bytecount_(cjIn) PVOID pvIn,
3355 _In_ ULONG cjOut,
3356 _Out_bytecap_(cjOut) PVOID pvOut);
3357 typedef FN_DrvQueryDeviceSupport *PFN_DrvQueryDeviceSupport;
3358 extern FN_DrvQueryDeviceSupport DrvQueryDeviceSupport;
3359
3360 /* DrvQueryDriverInfo.dwMode constants */
3361 #define DRVQUERY_USERMODE 0x00000001
3362
3363 typedef BOOL
3364 (APIENTRY FN_DrvQueryDriverInfo)(
3365 _In_ DWORD dwMode,
3366 _Out_bytecap_(cjBuf) PVOID pBuffer,
3367 _In_ DWORD cjBuf,
3368 _Out_ PDWORD pcbNeeded);
3369 typedef FN_DrvQueryDriverInfo *PFN_DrvQueryDriverInfo;
3370 extern FN_DrvQueryDriverInfo DrvQueryDriverInfo;
3371
3372 typedef PIFIMETRICS
3373 (APIENTRY FN_DrvQueryFont)(
3374 _In_ DHPDEV dhpdev,
3375 _In_ ULONG_PTR iFile,
3376 _In_ ULONG iFace,
3377 _Out_ ULONG_PTR *pid);
3378 typedef FN_DrvQueryFont *PFN_DrvQueryFont;
3379 extern FN_DrvQueryFont DrvQueryFont;
3380
3381 /* DrvQueryFontCaps.pulCaps constants */
3382 #define QC_OUTLINES 0x00000001
3383 #define QC_1BIT 0x00000002
3384 #define QC_4BIT 0x00000004
3385
3386 #define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
3387
3388 typedef LONG
3389 (APIENTRY FN_DrvQueryFontCaps)(
3390 _In_ ULONG culCaps,
3391 _Out_cap_(culCaps) ULONG *pulCaps);
3392 typedef FN_DrvQueryFontCaps *PFN_DrvQueryFontCaps;
3393 extern FN_DrvQueryFontCaps DrvQueryFontCaps;
3394
3395 /* DrvQueryFontData.iMode constants */
3396 #define QFD_GLYPHANDBITMAP 1L
3397 #define QFD_GLYPHANDOUTLINE 2L
3398 #define QFD_MAXEXTENTS 3L
3399 #define QFD_TT_GLYPHANDBITMAP 4L
3400 #define QFD_TT_GRAY1_BITMAP 5L
3401 #define QFD_TT_GRAY2_BITMAP 6L
3402 #define QFD_TT_GRAY4_BITMAP 8L
3403 #define QFD_TT_GRAY8_BITMAP 9L
3404
3405 #define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
3406
3407 typedef LONG
3408 (APIENTRY FN_DrvQueryFontData)(
3409 _In_ DHPDEV dhpdev,
3410 _In_ FONTOBJ *pfo,
3411 _In_ ULONG iMode,
3412 _In_ HGLYPH hg,
3413 _In_opt_ GLYPHDATA *pgd,
3414 _Out_bytecap_(cjSize) PVOID pv,
3415 _In_ ULONG cjSize);
3416 typedef FN_DrvQueryFontData *PFN_DrvQueryFontData;
3417 extern FN_DrvQueryFontData DrvQueryFontData;
3418
3419 /* DrvQueryFontFile.ulMode constants */
3420 #define QFF_DESCRIPTION 0x00000001
3421 #define QFF_NUMFACES 0x00000002
3422
3423 typedef LONG
3424 (APIENTRY FN_DrvQueryFontFile)(
3425 _In_ ULONG_PTR iFile,
3426 _In_ ULONG ulMode,
3427 _In_ ULONG cjBuf,
3428 _Out_bytecap_(cjBuf) ULONG *pulBuf);
3429 typedef FN_DrvQueryFontFile *PFN_DrvQueryFontFile;
3430 extern FN_DrvQueryFontFile DrvQueryFontFile;
3431
3432 /* DrvQueryFontTree.iMode constants */
3433 #define QFT_UNICODE 0L
3434 #define QFT_LIGATURES 1L
3435 #define QFT_KERNPAIRS 2L
3436 #define QFT_GLYPHSET 3L
3437
3438 typedef PVOID
3439 (APIENTRY FN_DrvQueryFontTree)(
3440 _In_ DHPDEV dhpdev,
3441 _In_ ULONG_PTR iFile,
3442 _In_ ULONG iFace,
3443 _In_ ULONG iMode,
3444 _Out_ ULONG_PTR *pid);
3445 typedef FN_DrvQueryFontTree *PFN_DrvQueryFontTree;
3446 extern FN_DrvQueryFontTree DrvQueryFontTree;
3447
3448 typedef PFD_GLYPHATTR
3449 (APIENTRY FN_DrvQueryGlyphAttrs)(
3450 _In_ FONTOBJ *pfo,
3451 _In_ ULONG iMode);
3452 typedef FN_DrvQueryGlyphAttrs *PFN_DrvQueryGlyphAttrs;
3453 extern FN_DrvQueryGlyphAttrs DrvQueryGlyphAttrs;
3454
3455 typedef ULONG
3456 (APIENTRY FN_DrvQueryPerBandInfo)(
3457 _In_ SURFOBJ *pso,
3458 _Inout_ PERBANDINFO *pbi);
3459 typedef FN_DrvQueryPerBandInfo *PFN_DrvQueryPerBandInfo;
3460 extern FN_DrvQueryPerBandInfo DrvQueryPerBandInfo;
3461
3462 /* DrvQueryTrueTypeOutline.bMetricsOnly constants */
3463 #define TTO_METRICS_ONLY 0x00000001
3464 #define TTO_QUBICS 0x00000002
3465 #define TTO_UNHINTED 0x00000004
3466
3467 typedef LONG
3468 (APIENTRY FN_DrvQueryTrueTypeOutline)(
3469 _In_ DHPDEV dhpdev,
3470 _In_ FONTOBJ *pfo,
3471 _In_ HGLYPH hglyph,
3472 _In_ BOOL bMetricsOnly,
3473 _Out_opt_ GLYPHDATA *pgldt,
3474 _In_ ULONG cjBuf,
3475 _Out_bytecap_(cjBuf) TTPOLYGONHEADER *ppoly);
3476 typedef FN_DrvQueryTrueTypeOutline *PFN_DrvQueryTrueTypeOutline;
3477 extern FN_DrvQueryTrueTypeOutline DrvQueryTrueTypeOutline;
3478
3479 typedef LONG
3480 (APIENTRY FN_DrvQueryTrueTypeTable)(
3481 _In_ ULONG_PTR iFile,
3482 _In_ ULONG ulFont,
3483 _In_ ULONG ulTag,
3484 _In_ PTRDIFF dpStart,
3485 _In_ ULONG cjBuf,
3486 _Out_opt_bytecap_(cjBuf) BYTE *pjBuf,
3487 _Outptr_opt_result_bytebuffer_all_maybenull_(*pcjTable) PBYTE *ppjTable,
3488 _Out_opt_ ULONG *pcjTable);
3489 typedef FN_DrvQueryTrueTypeTable *PFN_DrvQueryTrueTypeTable;
3490 extern FN_DrvQueryTrueTypeTable DrvQueryTrueTypeTable;
3491
3492 /* DrvRealizeBrush.iHatch constants */
3493 #define RB_DITHERCOLOR 0x80000000L
3494
3495 #define HS_DDI_MAX 6
3496
3497 typedef BOOL
3498 (APIENTRY FN_DrvRealizeBrush)(
3499 _In_ BRUSHOBJ *pbo,
3500 _Inout_ SURFOBJ *psoTarget, // CHECKME
3501 _In_opt_ SURFOBJ *psoPattern,
3502 _In_opt_ SURFOBJ *psoMask,
3503 _In_opt_ XLATEOBJ *pxlo,
3504 _In_ ULONG iHatch);
3505 typedef FN_DrvRealizeBrush *PFN_DrvRealizeBrush;
3506 extern FN_DrvRealizeBrush DrvRealizeBrush;
3507
3508 /* DrvResetDevice return values */
3509 #define DRD_SUCCESS 0
3510 #define DRD_ERROR 1
3511
3512 typedef ULONG
3513 (APIENTRY FN_DrvResetDevice)(
3514 _In_ DHPDEV dhpdev,
3515 _Reserved_ PVOID Reserved);
3516 typedef FN_DrvResetDevice *PFN_DrvResetDevice;
3517 extern FN_DrvResetDevice DrvResetDevice;
3518
3519 typedef BOOL
3520 (APIENTRY FN_DrvResetPDEV)(
3521 _In_ DHPDEV dhpdevOld,
3522 _In_ DHPDEV dhpdevNew);
3523 typedef FN_DrvResetPDEV *PFN_DrvResetPDEV;
3524 extern FN_DrvResetPDEV DrvResetPDEV;
3525
3526 /* DrvSaveScreenBits.iMode constants */
3527 #define SS_SAVE 0x00000000
3528 #define SS_RESTORE 0x00000001
3529 #define SS_FREE 0x00000002
3530
3531 typedef ULONG_PTR
3532 (APIENTRY FN_DrvSaveScreenBits)(
3533 _In_ SURFOBJ *pso,
3534 _In_ ULONG iMode,
3535 _In_ ULONG_PTR ident,
3536 _In_ RECTL *prcl);
3537 typedef FN_DrvSaveScreenBits *PFN_DrvSaveScreenBits;
3538 extern FN_DrvSaveScreenBits DrvSaveScreenBits;
3539
3540 typedef BOOL
3541 (APIENTRY FN_DrvSendPage)(
3542 _In_ SURFOBJ *pso);
3543 typedef FN_DrvSendPage *PFN_DrvSendPage;
3544 extern FN_DrvSendPage DrvSendPage;
3545
3546 /* DrvSetPalette range */
3547 #define WINDDI_MAXSETPALETTECOLORS 256
3548 #define WINDDI_MAXSETPALETTECOLORINDEX 255
3549
3550 typedef BOOL
3551 (APIENTRY FN_DrvSetPalette)(
3552 _In_ DHPDEV dhpdev,
3553 _In_ PALOBJ *ppalo,
3554 _In_ FLONG fl,
3555 _In_range_(0, WINDDI_MAXSETPALETTECOLORINDEX) ULONG iStart,
3556 _In_range_(0, WINDDI_MAXSETPALETTECOLORS - iStart) ULONG cColors);
3557 typedef FN_DrvSetPalette *PFN_DrvSetPalette;
3558 extern FN_DrvSetPalette DrvSetPalette;
3559
3560 typedef BOOL
3561 (APIENTRY FN_DrvSetPixelFormat)(
3562 _In_ SURFOBJ *pso,
3563 _In_ LONG iPixelFormat,
3564 _In_ HWND hwnd);
3565 typedef FN_DrvSetPixelFormat *PFN_DrvSetPixelFormat;
3566 extern FN_DrvSetPixelFormat DrvSetPixelFormat;
3567
3568 /* DrvSetPointerShape return values */
3569 #define SPS_ERROR 0x00000000
3570 #define SPS_DECLINE 0x00000001
3571 #define SPS_ACCEPT_NOEXCLUDE 0x00000002
3572 #define SPS_ACCEPT_EXCLUDE 0x00000003
3573 #define SPS_ACCEPT_SYNCHRONOUS 0x00000004
3574
3575 /* DrvSetPointerShape.fl constants */
3576 #define SPS_CHANGE 0x00000001L
3577 #define SPS_ASYNCCHANGE 0x00000002L
3578 #define SPS_ANIMATESTART 0x00000004L
3579 #define SPS_ANIMATEUPDATE 0x00000008L
3580 #define SPS_ALPHA 0x00000010L
3581 #define SPS_LENGTHMASK 0x00000F00L
3582 #define SPS_FREQMASK 0x000FF000L
3583
3584 typedef ULONG
3585 (APIENTRY FN_DrvSetPointerShape)(
3586 _In_ SURFOBJ *pso,
3587 _In_opt_ SURFOBJ *psoMask,
3588 _In_opt_ SURFOBJ *psoColor,
3589 _In_ XLATEOBJ *pxlo,
3590 _In_ LONG xHot,
3591 _In_ LONG yHot,
3592 _In_ LONG x,
3593 _In_ LONG y,
3594 _In_ RECTL *prcl,
3595 _In_ FLONG fl);
3596 typedef FN_DrvSetPointerShape *PFN_DrvSetPointerShape;
3597 extern FN_DrvSetPointerShape DrvSetPointerShape;
3598
3599 typedef BOOL
3600 (APIENTRY FN_DrvStartBanding)(
3601 _In_ SURFOBJ *pso,
3602 _In_ POINTL *pptl);
3603 typedef FN_DrvStartBanding *PFN_DrvStartBanding;
3604 extern FN_DrvStartBanding DrvStartBanding;
3605
3606 typedef BOOL
3607 (APIENTRY FN_DrvStartDoc)(
3608 _In_ SURFOBJ *pso,
3609 _In_ LPWSTR pwszDocName,
3610 _In_ DWORD dwJobId);
3611 typedef FN_DrvStartDoc *PFN_DrvStartDoc;
3612 extern FN_DrvStartDoc DrvStartDoc;
3613
3614 typedef BOOL
3615 (APIENTRY FN_DrvStartPage)(
3616 _In_ SURFOBJ *pso);
3617 typedef FN_DrvStartPage *PFN_DrvStartPage;
3618 extern FN_DrvStartPage DrvStartPage;
3619
3620 typedef BOOL
3621 (APIENTRY FN_DrvStretchBlt)(
3622 _Inout_ SURFOBJ *psoDest,
3623 _Inout_ SURFOBJ *psoSrc,
3624 _In_opt_ SURFOBJ *psoMask,
3625 _In_ CLIPOBJ *pco,
3626 _In_opt_ XLATEOBJ *pxlo,
3627 _In_opt_ COLORADJUSTMENT *pca,
3628 _In_ POINTL *pptlHTOrg,
3629 _In_ RECTL *prclDest,
3630 _In_ RECTL *prclSrc,
3631 _When_(psoMask, _In_) POINTL *pptlMask,
3632 _In_ ULONG iMode);
3633 typedef FN_DrvStretchBlt *PFN_DrvStretchBlt;
3634 extern FN_DrvStretchBlt DrvStretchBlt;
3635
3636 typedef BOOL
3637 (APIENTRY FN_DrvStretchBltROP)(
3638 _Inout_ SURFOBJ *psoDest,
3639 _Inout_ SURFOBJ *psoSrc,
3640 _In_opt_ SURFOBJ *psoMask,
3641 _In_ CLIPOBJ *pco,
3642 _In_opt_ XLATEOBJ *pxlo,
3643 _In_opt_ COLORADJUSTMENT *pca,
3644 _In_ POINTL *pptlHTOrg,
3645 _In_ RECTL *prclDest,
3646 _In_ RECTL *prclSrc,
3647 _When_(psoMask, _In_) POINTL *pptlMask,
3648 _In_ ULONG iMode,
3649 _In_ BRUSHOBJ *pbo,
3650 _In_ DWORD rop4);
3651 typedef FN_DrvStretchBltROP *PFN_DrvStretchBltROP;
3652 extern FN_DrvStretchBltROP DrvStretchBltROP;
3653
3654 typedef BOOL
3655 (APIENTRY FN_DrvStrokeAndFillPath)(
3656 _Inout_ SURFOBJ *pso,
3657 _Inout_ PATHOBJ *ppo,
3658 _In_ CLIPOBJ *pco,
3659 _In_opt_ XFORMOBJ *pxo,
3660 _In_ BRUSHOBJ *pboStroke,
3661 _In_ LINEATTRS *plineattrs,
3662 _In_ BRUSHOBJ *pboFill,
3663 _In_ POINTL *pptlBrushOrg,
3664 _In_ MIX mixFill,
3665 _In_ FLONG flOptions);
3666 typedef FN_DrvStrokeAndFillPath *PFN_DrvStrokeAndFillPath;
3667 extern FN_DrvStrokeAndFillPath DrvStrokeAndFillPath;
3668
3669 typedef BOOL
3670 (APIENTRY FN_DrvStrokePath)(
3671 _Inout_ SURFOBJ *pso,
3672 _In_ PATHOBJ *ppo,
3673 _In_ CLIPOBJ *pco,
3674 _In_opt_ XFORMOBJ *pxo,
3675 _In_ BRUSHOBJ *pbo,
3676 _In_ POINTL *pptlBrushOrg,
3677 _In_ LINEATTRS *plineattrs,
3678 _In_ MIX mix);
3679 typedef FN_DrvStrokePath *PFN_DrvStrokePath;
3680 extern FN_DrvStrokePath DrvStrokePath;
3681
3682 typedef BOOL
3683 (APIENTRY FN_DrvSwapBuffers)(
3684 _In_ SURFOBJ *pso,
3685 _In_ WNDOBJ *pwo);
3686 typedef FN_DrvSwapBuffers *PFN_DrvSwapBuffers;
3687 extern FN_DrvSwapBuffers DrvSwapBuffers;
3688
3689 typedef VOID
3690 (APIENTRY FN_DrvSynchronize)(
3691 _In_ DHPDEV dhpdev,
3692 _In_count_c_(0) RECTL *prcl); // should be ignored
3693 typedef FN_DrvSynchronize *PFN_DrvSynchronize;
3694 extern FN_DrvSynchronize DrvSynchronize;
3695
3696 /* DrvSynchronizeSurface.fl constants */
3697 #define DSS_TIMER_EVENT 0x00000001
3698 #define DSS_FLUSH_EVENT 0x00000002
3699 #define DSS_RESERVED 0x00000004
3700 #define DSS_RESERVED1 0x00000008
3701
3702 typedef VOID
3703 (APIENTRY FN_DrvSynchronizeSurface)(
3704 _In_ SURFOBJ *pso,
3705 _In_opt_ RECTL *prcl,
3706 _In_ FLONG fl);
3707 typedef FN_DrvSynchronizeSurface *PFN_DrvSynchronizeSurface;
3708 extern FN_DrvSynchronizeSurface DrvSynchronizeSurface;
3709
3710 typedef BOOL
3711 (APIENTRY FN_DrvTextOut)(
3712 _In_ SURFOBJ *pso,
3713 _In_ STROBJ *pstro,
3714 _In_ FONTOBJ *pfo,
3715 _In_ CLIPOBJ *pco,
3716 _Null_ RECTL *prclExtra,
3717 _In_opt_ RECTL *prclOpaque,
3718 _In_ BRUSHOBJ *pboFore,
3719 _In_ BRUSHOBJ *pboOpaque,
3720 _In_ POINTL *pptlOrg,
3721 _In_ MIX mix);
3722 typedef FN_DrvTextOut *PFN_DrvTextOut;
3723 extern FN_DrvTextOut DrvTextOut;
3724
3725 typedef BOOL
3726 (APIENTRY FN_DrvTransparentBlt)(
3727 _Inout_ SURFOBJ *psoDst,
3728 _In_ SURFOBJ *psoSrc,
3729 _In_ CLIPOBJ *pco,
3730 _In_opt_ XLATEOBJ *pxlo,
3731 _In_ RECTL *prclDst,
3732 _In_ RECTL *prclSrc,
3733 _In_ ULONG iTransColor,
3734 _In_ ULONG ulReserved);
3735 typedef FN_DrvTransparentBlt *PFN_DrvTransparentBlt;
3736 extern FN_DrvTransparentBlt DrvTransparentBlt;
3737
3738 typedef BOOL
3739 (APIENTRY FN_DrvUnloadFontFile)(
3740 _In_ ULONG_PTR iFile);
3741 typedef FN_DrvUnloadFontFile *PFN_DrvUnloadFontFile;
3742 extern FN_DrvUnloadFontFile DrvUnloadFontFile;
3743
3744 /* Direct draw */
3745
3746 typedef VOID
3747 (APIENTRY FN_DrvDisableDirectDraw)(
3748 _In_ DHPDEV dhpdev);
3749 typedef FN_DrvDisableDirectDraw *PFN_DrvDisableDirectDraw;
3750 extern FN_DrvDisableDirectDraw DrvDisableDirectDraw;
3751
3752 typedef BOOL
3753 (APIENTRY FN_DrvEnableDirectDraw)(
3754 _In_ DHPDEV dhpdev,
3755 _Out_ DD_CALLBACKS *pCallBacks,
3756 _Out_ DD_SURFACECALLBACKS *pSurfaceCallBacks,
3757 _Out_ DD_PALETTECALLBACKS *pPaletteCallBacks);
3758 typedef FN_DrvEnableDirectDraw *PFN_DrvEnableDirectDraw;
3759 extern FN_DrvEnableDirectDraw DrvEnableDirectDraw;
3760
3761 typedef BOOL
3762 (APIENTRY FN_DrvGetDirectDrawInfo)(
3763 _In_ DHPDEV dhpdev,
3764 _Out_ DD_HALINFO *pHalInfo,
3765 _Out_ DWORD *pdwNumHeaps,
3766 _Out_ VIDEOMEMORY *pvmList,
3767 _Out_ DWORD *pdwNumFourCCCodes,
3768 _Out_ DWORD *pdwFourCC);
3769 typedef FN_DrvGetDirectDrawInfo *PFN_DrvGetDirectDrawInfo;
3770 extern FN_DrvGetDirectDrawInfo DrvGetDirectDrawInfo;
3771
3772 typedef BOOL //DECLSPEC_DEPRECATED_DDK
3773 (APIENTRY FN_DrvQuerySpoolType)(
3774 _In_ DHPDEV dhpdev,
3775 _In_ LPWSTR pwchType);
3776 typedef FN_DrvQuerySpoolType *PFN_DrvQuerySpoolType;
3777 extern FN_DrvQuerySpoolType DrvQuerySpoolType;
3778
3779
3780 #ifdef __cplusplus
3781 }
3782 #endif
3783
3784 #endif /* defined __VIDEO_H__ */
3785
3786 #endif /* _WINDDI_ */