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