4 * GDI device driver interface
6 * This file is part of the w32api package.
9 * Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10 * Annotations by Timo Kreuzer <timo.kreuzer@reactos.org>
12 * THIS SOFTWARE IS NOT COPYRIGHTED
14 * This source code is offered for use in the public domain. You may
15 * use, modify or distribute it freely.
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.
29 #error video.h cannot be included with winddi.h
32 //#include <winapifamily.h>
35 #include <specstrings.h>
41 #ifndef DECLSPEC_IMPORT
42 #define DECLSPEC_IMPORT __attribute__((dllimport))
45 #if defined(_ENGINE_EXPORT_)
48 #define ENGAPI DECLSPEC_IMPORT
51 #ifndef _NO_DDRAWINT_NO_COM
53 #if !defined(EXTERN_C)
55 #define EXTERN_C extern "C"
56 #define __EXTERN_C extern "C"
58 #define EXTERN_C extern
61 #endif /* !defined(EXTERN_C) */
63 #if !defined(DEFINE_GUID)
65 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
66 __EXTERN_C const GUID name = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
68 #define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
69 EXTERN_C const GUID FAR name
70 #endif /* !INITGUID */
71 #endif /* !defined(DEFINE_GUID) */
73 #if !defined(DEFINE_GUIDEX)
74 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name
75 #endif /* !defined(DEFINE_GUIDEX) */
77 #if !defined(STATICGUIDOF)
78 #define STATICGUIDOF(guid) STATIC_##guid
79 #endif /* !defined(STATICGUIDOF) */
81 #if !defined(GUID_DEFINED)
90 #endif /* !defined(GUID_DEFINED) */
92 #if !defined(IsEqualGUID)
93 #define IsEqualGUID(guid1, guid2) \
94 (!memcmp((guid1), (guid2), sizeof(GUID)))
95 #endif /* !defined(IsEqualGUID) */
98 #define IsEqualIID IsEqualGUID
99 #endif /* !defined(IsEqualIID) */
101 #endif /* !_NO_DDRAWINT_NO_COM */
103 #define DDI_DRIVER_VERSION_NT4 0x00020000
104 #define DDI_DRIVER_VERSION_SP3 0x00020003
105 #define DDI_DRIVER_VERSION_NT5 0x00030000
106 #define DDI_DRIVER_VERSION_NT5_01 0x00030100
107 #define DDI_DRIVER_VERSION_NT5_01_SP1 0x00030101
109 #define GDI_DRIVER_VERSION 0x4000
111 #if defined(_X86_) && !defined(USERMODE_DRIVER) && !defined(BUILD_WOW6432)
112 typedef DWORD FLOATL
;
114 typedef FLOAT FLOATL
;
121 typedef ULONG_PTR HFF
;
122 typedef ULONG_PTR HFC
;
124 typedef LONG PTRDIFF
;
125 typedef PTRDIFF
*PPTRDIFF
;
130 typedef ULONG HGLYPH
;
131 typedef HGLYPH
*PHGLYPH
;
133 typedef LONG_PTR (APIENTRY
*PFN
)();
136 DECLARE_HANDLE(HDEV
);
137 DECLARE_HANDLE(HSURF
);
138 DECLARE_HANDLE(DHSURF
);
139 DECLARE_HANDLE(DHPDEV
);
140 DECLARE_HANDLE(HDRVOBJ
);
141 DECLARE_HANDLE(HSEMAPHORE
);
143 typedef _Return_type_success_(return >= 0) long NTSTATUS
;
146 typedef struct _ENG_EVENT
*PEVENT
;
149 #define OPENGL_CMD 4352
150 #define OPENGL_GETINFO 4353
151 #define WNDOBJ_SETUP 4354
153 #define FD_ERROR 0xFFFFFFFF
154 #define DDI_ERROR 0xFFFFFFFF
156 #define HFF_INVALID ((HFF) 0)
157 #define HFC_INVALID ((HFC) 0)
158 #define HGLYPH_INVALID ((HGLYPH) -1)
160 #define FP_ALTERNATEMODE 1
161 #define FP_WINDINGMODE 2
163 #define DN_ACCELERATION_LEVEL 1
164 #define DN_DEVICE_ORIGIN 2
165 #define DN_SLEEP_MODE 3
166 #define DN_DRAWING_BEGIN 4
167 #if (NTDDI_VERSION >= NTDDI_WIN8)
168 #define DN_ASSOCIATE_WINDOW 5
169 #define DN_COMPOSITION_CHANGED 6
170 #define DN_DRAWING_BEGIN_APIBITMAP 7
171 #define DN_SURFOBJ_DESTRUCTION 8
172 #endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
174 #define SGI_EXTRASPACE 0
178 #define DCR_HALFTONE 2
180 #define GX_IDENTITY 0
185 #define LTOFX(x) ((x) << 4)
186 #define FXTOL(x) ((x) >> 4)
187 #define FXTOLFLOOR(x) ((x) >> 4)
188 #define FXTOLCEILING(x) ((x + 0x0F) >> 4)
189 #define FXTOLROUND(x) ((((x) >> 3) + 1) >> 1)
191 #define SIZEOFDV(cAxes) (offsetof(DESIGNVECTOR, dvValues) + (cAxes) * sizeof(LONG))
192 #define SIZEOFAXIW(cAxes) (offsetof(AXESLISTW, axlAxisInfo) + (cAxes) * sizeof(AXISINFOW))
193 #define SIZEOFAXIA(cAxes) (offsetof(AXESLISTA, axlAxisInfo) + (cAxes) * sizeof(AXISINFOA))
195 typedef struct _POINTE
{
200 typedef union _FLOAT_LONG
{
203 } FLOAT_LONG
, *PFLOAT_LONG
;
205 typedef struct _POINTFIX
{
208 } POINTFIX
, *PPOINTFIX
;
210 typedef struct _RECTFX
{
217 typedef struct _POINTQF
{
220 } POINTQF
, *PPOINTQF
;
223 typedef struct _BLENDOBJ
{
224 BLENDFUNCTION BlendFunction
;
225 } BLENDOBJ
,*PBLENDOBJ
;
227 /* BRUSHOBJ.flColorType */
228 #define BR_DEVICE_ICM 0x01
229 #define BR_HOST_ICM 0x02
230 #define BR_CMYKCOLOR 0x04
231 #define BR_ORIGCOLOR 0x08
233 typedef struct _BRUSHOBJ
{
239 typedef struct _CIECHROMA
{
245 typedef struct _RUN
{
250 typedef struct _CLIPLINE
{
255 _Field_size_(c
) RUN arun
[1];
256 } CLIPLINE
, *PCLIPLINE
;
258 /* CLIPOBJ.iDComplexity constants */
263 /* CLIPOBJ.iFComplexity constants */
268 /* CLIPOBJ.iMode constants */
269 #define TC_RECTANGLES 0
272 /* CLIPOBJ.fjOptions constants */
273 #define OC_BANK_CLIP 1
275 typedef struct _CLIPOBJ
{
284 typedef struct _COLORINFO
{
291 CIECHROMA AlignmentWhite
;
295 LDECI4 MagentaInCyanDye
;
296 LDECI4 YellowInCyanDye
;
297 LDECI4 CyanInMagentaDye
;
298 LDECI4 YellowInMagentaDye
;
299 LDECI4 CyanInYellowDye
;
300 LDECI4 MagentaInYellowDye
;
301 } COLORINFO
, *PCOLORINFO
;
303 /* DEVHTADJDATA.DeviceFlags constants */
304 #define DEVHTADJF_COLOR_DEVICE 0x00000001
305 #define DEVHTADJF_ADDITIVE_DEVICE 0x00000002
307 typedef struct _DEVHTINFO
{
312 } DEVHTINFO
, *PDEVHTINFO
;
314 typedef struct _DEVHTADJDATA
{
318 PDEVHTINFO pDefHTInfo
;
319 PDEVHTINFO pAdjHTInfo
;
320 } DEVHTADJDATA
, *PDEVHTADJDATA
;
322 /* DEVINFO.flGraphicsCaps flags */
323 #define GCAPS_BEZIERS 0x00000001
324 #define GCAPS_GEOMETRICWIDE 0x00000002
325 #define GCAPS_ALTERNATEFILL 0x00000004
326 #define GCAPS_WINDINGFILL 0x00000008
327 #define GCAPS_HALFTONE 0x00000010
328 #define GCAPS_COLOR_DITHER 0x00000020
329 #define GCAPS_HORIZSTRIKE 0x00000040
330 #define GCAPS_VERTSTRIKE 0x00000080
331 #define GCAPS_OPAQUERECT 0x00000100
332 #define GCAPS_VECTORFONT 0x00000200
333 #define GCAPS_MONO_DITHER 0x00000400
334 #define GCAPS_ASYNCCHANGE 0x00000800
335 #define GCAPS_ASYNCMOVE 0x00001000
336 #define GCAPS_DONTJOURNAL 0x00002000
337 #define GCAPS_DIRECTDRAW 0x00004000
338 #define GCAPS_ARBRUSHOPAQUE 0x00008000
339 #define GCAPS_PANNING 0x00010000
340 #define GCAPS_HIGHRESTEXT 0x00040000
341 #define GCAPS_PALMANAGED 0x00080000
342 #define GCAPS_DITHERONREALIZE 0x00200000
343 #define GCAPS_NO64BITMEMACCESS 0x00400000
344 #define GCAPS_FORCEDITHER 0x00800000
345 #define GCAPS_GRAY16 0x01000000
346 #define GCAPS_ICM 0x02000000
347 #define GCAPS_CMYKCOLOR 0x04000000
348 #define GCAPS_LAYERED 0x08000000
349 #define GCAPS_ARBRUSHTEXT 0x10000000
350 #define GCAPS_SCREENPRECISION 0x20000000
351 #define GCAPS_FONT_RASTERIZER 0x40000000
352 #define GCAPS_NUP 0x80000000
354 /* DEVINFO.iDitherFormat constants */
366 /* DEVINFO.flGraphicsCaps2 flags */
367 #define GCAPS2_JPEGSRC 0x00000001
368 #define GCAPS2_xxxx 0x00000002
369 #define GCAPS2_PNGSRC 0x00000008
370 #define GCAPS2_CHANGEGAMMARAMP 0x00000010
371 #define GCAPS2_ALPHACURSOR 0x00000020
372 #define GCAPS2_SYNCFLUSH 0x00000040
373 #define GCAPS2_SYNCTIMER 0x00000080
374 #define GCAPS2_ICD_MULTIMON 0x00000100
375 #define GCAPS2_MOUSETRAILS 0x00000200
376 #define GCAPS2_RESERVED1 0x00000400
377 #if (NTDDI_VERSION >= NTDDI_VISTA)
378 #define GCAPS2_EXCLUDELAYERED 0x00000800
379 #define GCAPS2_INCLUDEAPIBITMAPS 0x00001000
380 #define GCAPS2_SHOWHIDDENPOINTER 0x00002000
381 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
382 #if (NTDDI_VERSION >= NTDDI_WIN7)
383 #define GCAPS2_CLEARTYPE 0x00004000
384 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
385 #if (NTDDI_VERSION >= NTDDI_WIN8)
386 #define GCAPS2_ACC_DRIVER 0x00008000
387 #endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
389 typedef struct _DEVINFO
{
390 FLONG flGraphicsCaps
;
391 LOGFONTW lfDefaultFont
;
392 LOGFONTW lfAnsiVarFont
;
393 LOGFONTW lfAnsiFixFont
;
398 HPALETTE hpalDefault
;
399 FLONG flGraphicsCaps2
;
400 } DEVINFO
, *PDEVINFO
;
405 (APIENTRY CALLBACK
*FREEOBJPROC
)(
406 _In_
struct _DRIVEROBJ
*pDriverObj
);
408 typedef struct _DRIVEROBJ
{
410 FREEOBJPROC pFreeProc
;
415 /* DRVFN.iFunc constants */
416 #define INDEX_DrvEnablePDEV 0L
417 #define INDEX_DrvCompletePDEV 1L
418 #define INDEX_DrvDisablePDEV 2L
419 #define INDEX_DrvEnableSurface 3L
420 #define INDEX_DrvDisableSurface 4L
421 #define INDEX_DrvAssertMode 5L
422 #define INDEX_DrvOffset 6L
423 #define INDEX_DrvResetPDEV 7L
424 #define INDEX_DrvDisableDriver 8L
425 #define INDEX_DrvUnknown1 9L
426 #define INDEX_DrvCreateDeviceBitmap 10L
427 #define INDEX_DrvDeleteDeviceBitmap 11L
428 #define INDEX_DrvRealizeBrush 12L
429 #define INDEX_DrvDitherColor 13L
430 #define INDEX_DrvStrokePath 14L
431 #define INDEX_DrvFillPath 15L
432 #define INDEX_DrvStrokeAndFillPath 16L
433 #define INDEX_DrvPaint 17L
434 #define INDEX_DrvBitBlt 18L
435 #define INDEX_DrvCopyBits 19L
436 #define INDEX_DrvStretchBlt 20L
437 #define INDEX_DrvUnknown2 21L
438 #define INDEX_DrvSetPalette 22L
439 #define INDEX_DrvTextOut 23L
440 #define INDEX_DrvEscape 24L
441 #define INDEX_DrvDrawEscape 25L
442 #define INDEX_DrvQueryFont 26L
443 #define INDEX_DrvQueryFontTree 27L
444 #define INDEX_DrvQueryFontData 28L
445 #define INDEX_DrvSetPointerShape 29L
446 #define INDEX_DrvMovePointer 30L
447 #define INDEX_DrvLineTo 31L
448 #define INDEX_DrvSendPage 32L
449 #define INDEX_DrvStartPage 33L
450 #define INDEX_DrvEndDoc 34L
451 #define INDEX_DrvStartDoc 35L
452 #define INDEX_DrvUnknown3 36L
453 #define INDEX_DrvGetGlyphMode 37L
454 #define INDEX_DrvSynchronize 38L
455 #define INDEX_DrvUnknown4 39L
456 #define INDEX_DrvSaveScreenBits 40L
457 #define INDEX_DrvGetModes 41L
458 #define INDEX_DrvFree 42L
459 #define INDEX_DrvDestroyFont 43L
460 #define INDEX_DrvQueryFontCaps 44L
461 #define INDEX_DrvLoadFontFile 45L
462 #define INDEX_DrvUnloadFontFile 46L
463 #define INDEX_DrvFontManagement 47L
464 #define INDEX_DrvQueryTrueTypeTable 48L
465 #define INDEX_DrvQueryTrueTypeOutline 49L
466 #define INDEX_DrvGetTrueTypeFile 50L
467 #define INDEX_DrvQueryFontFile 51L
468 #define INDEX_DrvMovePanning 52L
469 #define INDEX_DrvQueryAdvanceWidths 53L
470 #define INDEX_DrvSetPixelFormat 54L
471 #define INDEX_DrvDescribePixelFormat 55L
472 #define INDEX_DrvSwapBuffers 56L
473 #define INDEX_DrvStartBanding 57L
474 #define INDEX_DrvNextBand 58L
475 #define INDEX_DrvGetDirectDrawInfo 59L
476 #define INDEX_DrvEnableDirectDraw 60L
477 #define INDEX_DrvDisableDirectDraw 61L
478 #define INDEX_DrvQuerySpoolType 62L
479 #define INDEX_DrvUnknown5 63L
480 #define INDEX_DrvIcmCreateColorTransform 64L
481 #define INDEX_DrvIcmDeleteColorTransform 65L
482 #define INDEX_DrvIcmCheckBitmapBits 66L
483 #define INDEX_DrvIcmSetDeviceGammaRamp 67L
484 #define INDEX_DrvGradientFill 68L
485 #define INDEX_DrvStretchBltROP 69L
486 #define INDEX_DrvPlgBlt 70L
487 #define INDEX_DrvAlphaBlend 71L
488 #define INDEX_DrvSynthesizeFont 72L
489 #define INDEX_DrvGetSynthesizedFontFiles 73L
490 #define INDEX_DrvTransparentBlt 74L
491 #define INDEX_DrvQueryPerBandInfo 75L
492 #define INDEX_DrvQueryDeviceSupport 76L
493 #define INDEX_DrvReserved1 77L
494 #define INDEX_DrvReserved2 78L
495 #define INDEX_DrvReserved3 79L
496 #define INDEX_DrvReserved4 80L
497 #define INDEX_DrvReserved5 81L
498 #define INDEX_DrvReserved6 82L
499 #define INDEX_DrvReserved7 83L
500 #define INDEX_DrvReserved8 84L
501 #define INDEX_DrvDeriveSurface 85L
502 #define INDEX_DrvQueryGlyphAttrs 86L
503 #define INDEX_DrvNotify 87L
504 #define INDEX_DrvSynchronizeSurface 88L
505 #define INDEX_DrvResetDevice 89L
506 #define INDEX_DrvReserved9 90L
507 #define INDEX_DrvReserved10 91L
508 #define INDEX_DrvReserved11 92L
509 #if (NTDDI_VERSION >= NTDDI_VISTA)
510 #define INDEX_DrvRenderHint 93L
511 #if (NTDDI_VERSION >= NTDDI_WIN7)
512 #define INDEX_DrvCreateDeviceBitmapEx 94L
513 #define INDEX_DrvDeleteDeviceBitmapEx 95L
514 #define INDEX_DrvAssociateSharedSurface 96L
515 #define INDEX_DrvSynchronizeRedirectionBitmaps 97L
516 #define INDEX_DrvAccumulateD3DDirtyRect 98L
517 #define INDEX_DrvStartDxInterop 99L
518 #define INDEX_DrvEndDxInterop 100L
519 #define INDEX_DrvLockDisplayArea 101L
520 #define INDEX_DrvUnlockDisplayArea 102L
521 #define INDEX_LAST 103L
522 #else /* (NTDDI_VERSION >= NTDDI_WIN7) */
523 #define INDEX_LAST 94L
524 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
525 #else /* (NTDDI_VERSION >= NTDDI_VISTA) */
526 #define INDEX_LAST 93L
527 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
529 typedef struct _DRVFN
{
534 /* DRVENABLEDATA.iDriverVersion constants */
535 #define DDI_DRIVER_VERSION_NT4 0x00020000
536 #define DDI_DRIVER_VERSION_SP3 0x00020003
537 #define DDI_DRIVER_VERSION_NT5 0x00030000
538 #define DDI_DRIVER_VERSION_NT5_01 0x00030100
539 #define DDI_DRIVER_VERSION_NT5_01_SP1 0x00030101
541 typedef struct tagDRVENABLEDATA
{
542 ULONG iDriverVersion
;
545 } DRVENABLEDATA
, *PDRVENABLEDATA
;
547 /* Font file status values */
548 #define FF_SIGNATURE_VERIFIED 0x00000001L
549 #define FF_IGNORED_SIGNATURE 0x00000002L
551 /* Obsolete in Windows 2000 and later */
556 PBYTE pvCurrentRecord
;
557 } EMFINFO
, *PEMFINFO
;
559 typedef struct _ENGSAFESEMAPHORE
{
564 typedef struct _ENG_TIME_FIELDS
{
565 _Field_range_(1601,MAXUSHORT
) USHORT usYear
;
566 _Field_range_(1,12) USHORT usMonth
;
567 _Field_range_(1,31) USHORT usDay
;
568 _Field_range_(0,23) USHORT usHour
;
569 _Field_range_(0,59) USHORT usMinute
;
570 _Field_range_(0,59) USHORT usSecond
;
571 _Field_range_(0,999) USHORT usMilliseconds
;
572 _Field_range_(0,6) USHORT usWeekday
; // 0 == Sunday
573 } ENG_TIME_FIELDS
, *PENG_TIME_FIELDS
;
575 typedef struct _ENUMRECTS
{
580 typedef struct _FD_XFORM
{
585 } FD_XFORM
, *PFD_XFORM
;
587 /* FD_DEVICEMETRICS.flRealizedType constants */
588 #define FDM_TYPE_BM_SIDE_CONST 0x00000001
589 #define FDM_TYPE_MAXEXT_EQUAL_BM_SIDE 0x00000002
590 #define FDM_TYPE_CHAR_INC_EQUAL_BM_BASE 0x00000004
591 #define FDM_TYPE_ZERO_BEARINGS 0x00000008
592 #define FDM_TYPE_CONST_BEARINGS 0x00000010
594 typedef struct _FD_DEVICEMETRICS
{
595 FLONG flRealizedType
;
601 POINTL ptlUnderline1
;
603 POINTL ptlULThickness
;
604 POINTL ptlSOThickness
;
608 FD_XFORM fdxQuantized
;
609 LONG lNonLinearExtLeading
;
610 LONG lNonLinearIntLeading
;
611 LONG lNonLinearMaxCharWidth
;
612 LONG lNonLinearAvgCharWidth
;
617 } FD_DEVICEMETRICS
, *PFD_DEVICEMETRICS
;
619 /* FD_GLYPHATTR.iMode constants */
620 #define FO_ATTR_MODE_ROTATE 1
622 typedef struct _FD_GLYPHATTR
{
626 _Field_size_((cGlyphs
+7)/8) BYTE aGlyphAttr
[1];
627 } FD_GLYPHATTR
, *PFD_GLYPHATTR
;
629 /* FD_GLYPHSET.flAccel */
630 #define GS_UNICODE_HANDLES 0x00000001
631 #define GS_8BIT_HANDLES 0x00000002
632 #define GS_16BIT_HANDLES 0x00000004
634 typedef struct _WCRUN
{
640 typedef struct _FD_GLYPHSET
{
643 ULONG cGlyphsSupported
;
645 _Field_size_(cRuns
) WCRUN awcrun
[1];
646 } FD_GLYPHSET
, *PFD_GLYPHSET
;
648 typedef struct _FD_KERNINGPAIR
{
654 /* Obsolete in Windows 2000 and later */
655 typedef struct _LIGATURE
{
660 } LIGATURE
, *PLIGATURE
;
662 /* Obsolete in Windows 2000 and later */
663 typedef struct _FD_LIGATURE
{
670 #if defined(_X86_) && !defined(USERMODE_DRIVER)
671 typedef struct _FLOATOBJ
675 } FLOATOBJ
, *PFLOATOBJ
;
677 typedef FLOAT FLOATOBJ
, *PFLOATOBJ
;
680 #ifndef USERMODE_DRIVER
681 typedef struct tagFLOATOBJ_XFORM
{
688 } FLOATOBJ_XFORM
, *PFLOATOBJ_XFORM
, FAR
*LPFLOATOBJ_XFORM
;
690 typedef XFORML FLOATOBJ_XFORM
, *PFLOATOBJ_XFORM
, FAR
*LPFLOATOBJ_XFORM
;
693 /* FONTDIFF.fsSelection */
694 #define FM_SEL_ITALIC 0x0001
695 #define FM_SEL_UNDERSCORE 0x0002
696 #define FM_SEL_NEGATIVE 0x0004
697 #define FM_SEL_OUTLINED 0x0008
698 #define FM_SEL_STRIKEOUT 0x0010
699 #define FM_SEL_BOLD 0x0020
700 #define FM_SEL_REGULAR 0x0040
702 typedef struct _FONTDIFF
{
709 FWORD fwdAveCharWidth
;
714 typedef struct _FONTSIM
{
717 PTRDIFF dpBoldItalic
;
720 /* FONTINFO.flCaps constants */
721 #define FO_DEVICE_FONT 1L
722 #define FO_OUTLINE_CAPABLE 2L
724 typedef struct _FONTINFO
{
727 ULONG cGlyphsSupported
;
732 } FONTINFO
, *PFONTINFO
;
734 /* FONTOBJ.flFontType constants */
735 #define FO_TYPE_RASTER RASTER_FONTTYPE
736 #define FO_TYPE_DEVICE DEVICE_FONTTYPE
737 #define FO_TYPE_TRUETYPE TRUETYPE_FONTTYPE
738 #define FO_TYPE_OPENTYPE OPENTYPE_FONTTYPE
740 #define FO_SIM_BOLD 0x00002000
741 #define FO_SIM_ITALIC 0x00004000
742 #define FO_EM_HEIGHT 0x00008000
743 #define FO_GRAY16 0x00010000
744 #define FO_NOGRAY16 0x00020000
745 #define FO_NOHINTS 0x00040000
746 #define FO_NO_CHOICE 0x00080000
747 #define FO_CFF 0x00100000
748 #define FO_POSTSCRIPT 0x00200000
749 #define FO_MULTIPLEMASTER 0x00400000
750 #define FO_VERT_FACE 0x00800000
751 #define FO_DBCS_FONT 0X01000000
752 #define FO_NOCLEARTYPE 0x02000000
753 #define FO_CLEARTYPE_X 0x10000000
754 #define FO_CLEARTYPE_Y 0x20000000
755 #define FO_CLEARTYPENATURAL_X 0x40000000
757 #define FD_NEGATIVE_FONT 1L /* Obsolete in Windows 2000 and later */
758 #define FO_DEVICE_FONT 1L
759 #define FO_OUTLINE_CAPABLE 2L
761 typedef struct _FONTOBJ
{
774 typedef struct _GAMMARAMP
{
778 } GAMMARAMP
, *PGAMMARAMP
;
780 /* GDIINFO.ulPrimaryOrder constants */
781 #define PRIMARY_ORDER_ABC 0
782 #define PRIMARY_ORDER_ACB 1
783 #define PRIMARY_ORDER_BAC 2
784 #define PRIMARY_ORDER_BCA 3
785 #define PRIMARY_ORDER_CBA 4
786 #define PRIMARY_ORDER_CAB 5
788 /* GDIINFO.ulHTPatternSize constants */
789 #define HT_PATSIZE_2x2 0
790 #define HT_PATSIZE_2x2_M 1
791 #define HT_PATSIZE_4x4 2
792 #define HT_PATSIZE_4x4_M 3
793 #define HT_PATSIZE_6x6 4
794 #define HT_PATSIZE_6x6_M 5
795 #define HT_PATSIZE_8x8 6
796 #define HT_PATSIZE_8x8_M 7
797 #define HT_PATSIZE_10x10 8
798 #define HT_PATSIZE_10x10_M 9
799 #define HT_PATSIZE_12x12 10
800 #define HT_PATSIZE_12x12_M 11
801 #define HT_PATSIZE_14x14 12
802 #define HT_PATSIZE_14x14_M 13
803 #define HT_PATSIZE_16x16 14
804 #define HT_PATSIZE_16x16_M 15
805 #define HT_PATSIZE_SUPERCELL 16
806 #define HT_PATSIZE_SUPERCELL_M 17
807 #define HT_PATSIZE_USER 18
808 #define HT_PATSIZE_MAX_INDEX HT_PATSIZE_USER
809 #define HT_PATSIZE_DEFAULT HT_PATSIZE_SUPERCELL_M
810 #define HT_USERPAT_CX_MIN 4
811 #define HT_USERPAT_CX_MAX 256
812 #define HT_USERPAT_CY_MIN 4
813 #define HT_USERPAT_CY_MAX 256
815 /* GDIINFO.ulHTOutputFormat constants */
816 #define HT_FORMAT_1BPP 0
817 #define HT_FORMAT_4BPP 2
818 #define HT_FORMAT_4BPP_IRGB 3
819 #define HT_FORMAT_8BPP 4
820 #define HT_FORMAT_16BPP 5
821 #define HT_FORMAT_24BPP 6
822 #define HT_FORMAT_32BPP 7
824 /* GDIINFO.flHTFlags */
825 #define HT_FLAG_SQUARE_DEVICE_PEL 0x00000001
826 #define HT_FLAG_HAS_BLACK_DYE 0x00000002
827 #define HT_FLAG_ADDITIVE_PRIMS 0x00000004
828 #define HT_FLAG_USE_8BPP_BITMASK 0x00000008
829 #define HT_FLAG_INK_HIGH_ABSORPTION 0x00000010
830 #define HT_FLAG_INK_ABSORPTION_INDICES 0x00000060
831 #define HT_FLAG_DO_DEVCLR_XFORM 0x00000080
832 #define HT_FLAG_OUTPUT_CMY 0x00000100
833 #define HT_FLAG_PRINT_DRAFT_MODE 0x00000200
834 #define HT_FLAG_INVERT_8BPP_BITMASK_IDX 0x00000400
835 #define HT_FLAG_8BPP_CMY332_MASK 0xFF000000
837 #define MAKE_CMYMASK_BYTE(c,m,y) ((BYTE)(((BYTE)(c) & 0x07) << 5) \
838 |(BYTE)(((BYTE)(m) & 0x07) << 2) \
839 |(BYTE)((BYTE)(y) & 0x03))
841 #define MAKE_CMY332_MASK(c,m,y) ((DWORD)(((DWORD)(c) & 0x07) << 29)\
842 |(DWORD)(((DWORD)(m) & 0x07) << 26)\
843 |(DWORD)(((DWORD)(y) & 0x03) << 24))
845 /* GDIINFO.flHTFlags constants */
846 #define HT_FLAG_INK_ABSORPTION_IDX0 0x00000000
847 #define HT_FLAG_INK_ABSORPTION_IDX1 0x00000020
848 #define HT_FLAG_INK_ABSORPTION_IDX2 0x00000040
849 #define HT_FLAG_INK_ABSORPTION_IDX3 0x00000060
851 #define HT_FLAG_HIGHEST_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
852 |HT_FLAG_INK_ABSORPTION_IDX3)
853 #define HT_FLAG_HIGHER_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
854 |HT_FLAG_INK_ABSORPTION_IDX2)
855 #define HT_FLAG_HIGH_INK_ABSORPTION (HT_FLAG_INK_HIGH_ABSORPTION \
856 |HT_FLAG_INK_ABSORPTION_IDX1)
857 #define HT_FLAG_NORMAL_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX0
858 #define HT_FLAG_LOW_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX1
859 #define HT_FLAG_LOWER_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX2
860 #define HT_FLAG_LOWEST_INK_ABSORPTION HT_FLAG_INK_ABSORPTION_IDX3
862 #define HT_BITMASKPALRGB (DWORD)'0BGR'
863 #define HT_SET_BITMASKPAL2RGB(pPal) (*((LPDWORD)(pPal)) = HT_BITMASKPALRGB)
864 #define HT_IS_BITMASKPALRGB(pPal) (*((LPDWORD)(pPal)) == (DWORD)0)
866 /* GDIINFO.ulPhysicalPixelCharacteristics constants */
867 #define PPC_DEFAULT 0x0
868 #define PPC_UNDEFINED 0x1
869 #define PPC_RGB_ORDER_VERTICAL_STRIPES 0x2
870 #define PPC_BGR_ORDER_VERTICAL_STRIPES 0x3
871 #define PPC_RGB_ORDER_HORIZONTAL_STRIPES 0x4
872 #define PPC_BGR_ORDER_HORIZONTAL_STRIPES 0x5
874 #define PPG_DEFAULT 0
877 typedef struct _GDIINFO
{
900 POINTL ptlPhysOffset
;
904 ULONG ulDevicePelsDPI
;
905 ULONG ulPrimaryOrder
;
906 ULONG ulHTPatternSize
;
907 ULONG ulHTOutputFormat
;
910 ULONG ulBltAlignment
;
911 ULONG ulPanningHorzRes
;
912 ULONG ulPanningVertRes
;
913 ULONG xPanningAlignment
;
914 ULONG yPanningAlignment
;
921 ULONG ulPhysicalPixelCharacteristics
;
922 ULONG ulPhysicalPixelGamma
;
923 } GDIINFO
, *PGDIINFO
;
925 /* PATHDATA.flags constants */
926 #define PD_BEGINSUBPATH 0x00000001
927 #define PD_ENDSUBPATH 0x00000002
928 #define PD_RESETSTYLE 0x00000004
929 #define PD_CLOSEFIGURE 0x00000008
930 #define PD_BEZIERS 0x00000010
931 #define PD_ALL (PD_BEGINSUBPATH \
937 typedef struct _PATHDATA
{
941 } PATHDATA
, *PPATHDATA
;
943 /* PATHOBJ.fl constants */
944 #define PO_BEZIERS 0x00000001
945 #define PO_ELLIPSE 0x00000002
946 #define PO_ALL_INTEGERS 0x00000004
947 #define PO_ENUM_AS_INTEGERS 0x00000008
948 #if (NTDDI_VERSION >= NTDDI_WIN7)
949 #define PO_WIDENED 0x00000010
950 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
952 typedef struct _PATHOBJ
{
957 typedef BYTE GAMMA_TABLES
[2][256];
959 typedef struct _GLYPHBITS
{
965 typedef union _GLYPHDEF
{
970 typedef struct _GLYPHPOS
{
974 } GLYPHPOS
, *PGLYPHPOS
;
976 typedef struct _GLYPHDATA
{
988 typedef struct _IFIEXTRA
{
992 PTRDIFF dpDesignVector
;
994 ULONG aulReserved
[1];
995 } IFIEXTRA
, *PIFIEXTRA
;
997 /* IFIMETRICS constants */
999 #define FM_VERSION_NUMBER 0x0
1001 /* IFIMETRICS.fsType constants */
1002 #define FM_TYPE_LICENSED 0x2
1003 #define FM_READONLY_EMBED 0x4
1004 #define FM_EDITABLE_EMBED 0x8
1005 #define FM_NO_EMBEDDING FM_TYPE_LICENSED
1007 /* IFIMETRICS.flInfo constants */
1008 #define FM_INFO_TECH_TRUETYPE 0x00000001
1009 #define FM_INFO_TECH_BITMAP 0x00000002
1010 #define FM_INFO_TECH_STROKE 0x00000004
1011 #define FM_INFO_TECH_OUTLINE_NOT_TRUETYPE 0x00000008
1012 #define FM_INFO_ARB_XFORMS 0x00000010
1013 #define FM_INFO_1BPP 0x00000020
1014 #define FM_INFO_4BPP 0x00000040
1015 #define FM_INFO_8BPP 0x00000080
1016 #define FM_INFO_16BPP 0x00000100
1017 #define FM_INFO_24BPP 0x00000200
1018 #define FM_INFO_32BPP 0x00000400
1019 #define FM_INFO_INTEGER_WIDTH 0x00000800
1020 #define FM_INFO_CONSTANT_WIDTH 0x00001000
1021 #define FM_INFO_NOT_CONTIGUOUS 0x00002000
1022 #define FM_INFO_TECH_MM 0x00004000
1023 #define FM_INFO_RETURNS_OUTLINES 0x00008000
1024 #define FM_INFO_RETURNS_STROKES 0x00010000
1025 #define FM_INFO_RETURNS_BITMAPS 0x00020000
1026 #define FM_INFO_DSIG 0x00040000
1027 #define FM_INFO_RIGHT_HANDED 0x00080000
1028 #define FM_INFO_INTEGRAL_SCALING 0x00100000
1029 #define FM_INFO_90DEGREE_ROTATIONS 0x00200000
1030 #define FM_INFO_OPTICALLY_FIXED_PITCH 0x00400000
1031 #define FM_INFO_DO_NOT_ENUMERATE 0x00800000
1032 #define FM_INFO_ISOTROPIC_SCALING_ONLY 0x01000000
1033 #define FM_INFO_ANISOTROPIC_SCALING_ONLY 0x02000000
1034 #define FM_INFO_TECH_CFF 0x04000000
1035 #define FM_INFO_FAMILY_EQUIV 0x08000000
1036 #define FM_INFO_DBCS_FIXED_PITCH 0x10000000
1037 #define FM_INFO_NONNEGATIVE_AC 0x20000000
1038 #define FM_INFO_IGNORE_TC_RA_ABLE 0x40000000
1039 #define FM_INFO_TECH_TYPE1 0x80000000
1041 #define MAXCHARSETS 16 /* Obsolete in Windows 2000 and later */
1043 /* IFIMETRICS.ulPanoseCulture constants */
1044 #define FM_PANOSE_CULTURE_LATIN 0x0
1046 typedef struct _IFIMETRICS
{
1049 PTRDIFF dpwszFamilyName
;
1050 PTRDIFF dpwszStyleName
;
1051 PTRDIFF dpwszFaceName
;
1052 PTRDIFF dpwszUniqueName
;
1059 BYTE jWinPitchAndFamily
;
1064 FWORD fwdUnitsPerEm
;
1065 FWORD fwdLowestPPEm
;
1066 FWORD fwdWinAscender
;
1067 FWORD fwdWinDescender
;
1068 FWORD fwdMacAscender
;
1069 FWORD fwdMacDescender
;
1070 FWORD fwdMacLineGap
;
1071 FWORD fwdTypoAscender
;
1072 FWORD fwdTypoDescender
;
1073 FWORD fwdTypoLineGap
;
1074 FWORD fwdAveCharWidth
;
1075 FWORD fwdMaxCharInc
;
1078 FWORD fwdSubscriptXSize
;
1079 FWORD fwdSubscriptYSize
;
1080 FWORD fwdSubscriptXOffset
;
1081 FWORD fwdSubscriptYOffset
;
1082 FWORD fwdSuperscriptXSize
;
1083 FWORD fwdSuperscriptYSize
;
1084 FWORD fwdSuperscriptXOffset
;
1085 FWORD fwdSuperscriptYOffset
;
1086 FWORD fwdUnderscoreSize
;
1087 FWORD fwdUnderscorePosition
;
1088 FWORD fwdStrikeoutSize
;
1089 FWORD fwdStrikeoutPosition
;
1096 WCHAR wcDefaultChar
;
1103 ULONG cKerningPairs
;
1104 ULONG ulPanoseCulture
;
1109 } IFIMETRICS
, *PIFIMETRICS
;
1112 #define LA_GEOMETRIC 0x00000001
1113 #define LA_ALTERNATE 0x00000002
1114 #define LA_STARTGAP 0x00000004
1115 #define LA_STYLED 0x00000008
1117 /* LINEATTRS.iJoin */
1118 #define JOIN_ROUND 0L
1119 #define JOIN_BEVEL 1L
1120 #define JOIN_MITER 2L
1122 /* LINEATTRS.iEndCap */
1123 #define ENDCAP_ROUND 0L
1124 #define ENDCAP_SQUARE 1L
1125 #define ENDCAP_BUTT 2L
1127 typedef struct _LINEATTRS
{
1135 FLOAT_LONG elStyleState
;
1136 } LINEATTRS
, *PLINEATTRS
;
1138 typedef struct _PALOBJ
{
1142 typedef struct _PERBANDINFO
{
1143 BOOL bRepeatThisBand
;
1147 } PERBANDINFO
, *PPERBANDINFO
;
1149 /* STROBJ.flAccel constants */
1150 #define SO_FLAG_DEFAULT_PLACEMENT 0x00000001
1151 #define SO_HORIZONTAL 0x00000002
1152 #define SO_VERTICAL 0x00000004
1153 #define SO_REVERSED 0x00000008
1154 #define SO_ZERO_BEARINGS 0x00000010
1155 #define SO_CHAR_INC_EQUAL_BM_BASE 0x00000020
1156 #define SO_MAXEXT_EQUAL_BM_SIDE 0x00000040
1157 #define SO_DO_NOT_SUBSTITUTE_DEVICE_FONT 0x00000080
1158 #define SO_GLYPHINDEX_TEXTOUT 0x00000100
1159 #define SO_ESC_NOT_ORIENT 0x00000200
1160 #define SO_DXDY 0x00000400
1161 #define SO_CHARACTER_EXTRA 0x00000800
1162 #define SO_BREAK_EXTRA 0x00001000
1164 typedef struct _STROBJ
{
1174 /* SURFOBJ.iType constants */
1175 #define STYPE_BITMAP 0L
1176 #define STYPE_DEVICE 1L
1177 #define STYPE_DEVBITMAP 3L
1179 /* SURFOBJ.fjBitmap constants */
1180 #define BMF_TOPDOWN 0x0001
1181 #define BMF_NOZEROINIT 0x0002
1182 #define BMF_DONTCACHE 0x0004
1183 #define BMF_USERMEM 0x0008
1184 #define BMF_KMSECTION 0x0010
1185 #define BMF_NOTSYSMEM 0x0020
1186 #define BMF_WINDOW_BLT 0x0040
1187 #define BMF_UMPDMEM 0x0080
1188 #if (NTDDI_VERSION >= NTDDI_WIN7)
1189 #define BMF_TEMP_ALPHA 0x0100
1190 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1191 #if (NTDDI_VERSION >= NTDDI_WIN8)
1192 #define BMF_ACC_NOTIFY 0x8000
1193 #define BMF_RMT_ENTER 0x4000
1194 #endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
1196 #if (NTDDI_VERSION >= NTDDI_WIN8)
1197 #define BMF_RESERVED 0x3E00
1198 #elif (NTDDI_VERSION >= NTDDI_WIN7)
1199 #define BMF_RESERVED 0xFE00
1201 #define BMF_RESERVED 0xFF00
1204 typedef struct _SURFOBJ
{
1215 ULONG iBitmapFormat
;
1220 typedef struct _TYPE1_FONT
{
1226 typedef struct _WNDOBJ
{
1233 typedef struct _XFORML
{
1242 typedef struct _XFORMOBJ
{
1246 /* XLATEOBJ.flXlate constants */
1247 #define XO_TRIVIAL 0x00000001
1248 #define XO_TABLE 0x00000002
1249 #define XO_TO_MONO 0x00000004
1250 #define XO_FROM_CMYK 0x00000008
1251 #define XO_DEVICE_ICM 0x00000010
1252 #define XO_HOST_ICM 0x00000020
1254 typedef struct _XLATEOBJ
{
1263 /* WNDOBJCHANGEPROC.fl constants */
1264 #define WOC_RGN_CLIENT_DELTA 0x00000001
1265 #define WOC_RGN_CLIENT 0x00000002
1266 #define WOC_RGN_SURFACE_DELTA 0x00000004
1267 #define WOC_RGN_SURFACE 0x00000008
1268 #define WOC_CHANGED 0x00000010
1269 #define WOC_DELETE 0x00000020
1270 #define WOC_DRAWN 0x00000040
1271 #define WOC_SPRITE_OVERLAP 0x00000080
1272 #define WOC_SPRITE_NO_OVERLAP 0x00000100
1273 #if (NTDDI_VERSION >= NTDDI_VISTA)
1274 #define WOC_RGN_SPRITE 0x00000200
1275 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1277 typedef VOID (APIENTRY CALLBACK
*WNDOBJCHANGEPROC
)(
1285 BRUSHOBJ_hGetColorTransform(
1286 _In_ BRUSHOBJ
*pbo
);
1288 _Ret_opt_bytecount_(cj
)
1292 BRUSHOBJ_pvAllocRbrush(
1299 BRUSHOBJ_pvGetRbrush(
1300 _In_ BRUSHOBJ
*pbo
);
1305 BRUSHOBJ_ulGetBrushColor(
1306 _In_ BRUSHOBJ
*pbo
);
1314 _Out_bytecap_(cj
) ULONG
*pul
);
1316 /* CLIPOBJ_cEnumStart.iType constants */
1317 #define CT_RECTANGLES 0L
1319 /* CLIPOBJ_cEnumStart.iDirection constants */
1320 #define CD_RIGHTDOWN 0x00000000
1321 #define CD_LEFTDOWN 0x00000001
1322 #define CD_LEFTWARDS 0x00000001
1323 #define CD_RIGHTUP 0x00000002
1324 #define CD_UPWARDS 0x00000002
1325 #define CD_LEFTUP 0x00000003
1326 #define CD_ANY 0x00000004
1332 _Inout_ CLIPOBJ
*pco
,
1335 _In_ ULONG iDirection
,
1344 #if (NTDDI_VERSION >= NTDDI_VISTA)
1355 EngAcquireSemaphore(
1356 _Inout_ HSEMAPHORE hsem
);
1358 #define FL_ZERO_MEMORY 0x00000001
1359 #define FL_NONPAGED_MEMORY 0x00000002
1360 #if (NTDDI_VERSION >= NTDDI_WIN7)
1361 #define FL_NON_SESSION 0x00000004
1362 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
1364 #ifdef USERMODE_DRIVER
1366 #define EngAllocMem(fl, cj, tag) ((PVOID)GlobalAlloc(((fl) & FL_ZERO_MEMORY) ? GPTR : GMEM_FIXED, cj))
1367 #define EngAllocPrivateUserMem(psl, cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
1368 #define EngAllocUserMem(cj, tag) ((PVOID)GlobalAlloc(GMEM_FIXED, cj))
1370 #else /* !USERMODE_DRIVER */
1372 _Must_inspect_result_
1373 _When_(fl
& FL_ZERO_MEMORY
, _Ret_opt_bytecount_(cjMemSize
))
1374 _When_(!(fl
& FL_ZERO_MEMORY
), _Ret_opt_bytecap_(cjMemSize
))
1375 __drv_allocatesMem(Mem
)
1381 _In_ ULONG cjMemSize
,
1384 _Must_inspect_result_
1385 _Ret_opt_bytecount_(cjMemSize
)
1386 __drv_allocatesMem(PrivateUserMem
)
1390 EngAllocPrivateUserMem(
1391 _In_ PDD_SURFACE_LOCAL psl
,
1392 _In_ SIZE_T cjMemSize
,
1395 _Must_inspect_result_
1396 _Ret_opt_bytecount_(cjMemSize
)
1397 __drv_allocatesMem(UserMem
)
1402 _In_ SIZE_T cjMemSize
,
1405 #endif /* !USERMODE_DRIVER */
1411 _Inout_ SURFOBJ
*psoDest
,
1412 _In_ SURFOBJ
*psoSrc
,
1413 _In_opt_ CLIPOBJ
*pco
,
1414 _In_opt_ XLATEOBJ
*pxlo
,
1415 _In_ RECTL
*prclDest
,
1416 _In_ RECTL
*prclSrc
,
1417 _In_ BLENDOBJ
*pBlendObj
);
1419 /* EngAssociateSurface.flHooks constants */
1420 #define HOOK_BITBLT 0x00000001
1421 #define HOOK_STRETCHBLT 0x00000002
1422 #define HOOK_PLGBLT 0x00000004
1423 #define HOOK_TEXTOUT 0x00000008
1424 #define HOOK_PAINT 0x00000010
1425 #define HOOK_STROKEPATH 0x00000020
1426 #define HOOK_FILLPATH 0x00000040
1427 #define HOOK_STROKEANDFILLPATH 0x00000080
1428 #define HOOK_LINETO 0x00000100
1429 #define HOOK_COPYBITS 0x00000400
1430 #define HOOK_MOVEPANNING 0x00000800
1431 #define HOOK_SYNCHRONIZE 0x00001000
1432 #define HOOK_STRETCHBLTROP 0x00002000
1433 #define HOOK_SYNCHRONIZEACCESS 0x00004000
1434 #define HOOK_TRANSPARENTBLT 0x00008000
1435 #define HOOK_ALPHABLEND 0x00010000
1436 #define HOOK_GRADIENTFILL 0x00020000
1437 #if (NTDDI_VERSION >= NTDDI_VISTA)
1438 #define HOOK_FLAGS 0x0003b5ef
1440 #define HOOK_FLAGS 0x0003b5ff
1446 EngAssociateSurface(
1449 _In_ FLONG flHooks
);
1455 _Inout_ SURFOBJ
*psoTrg
,
1456 _In_opt_ SURFOBJ
*psoSrc
,
1457 _In_opt_ SURFOBJ
*psoMask
,
1458 _In_opt_ CLIPOBJ
*pco
,
1459 _In_opt_ XLATEOBJ
*pxlo
,
1460 _In_ RECTL
*prclTrg
,
1461 _In_opt_ POINTL
*pptlSrc
,
1462 _In_opt_ POINTL
*pptlMask
,
1463 _In_opt_ BRUSHOBJ
*pbo
,
1464 _In_opt_ POINTL
*pptlBrush
,
1477 _In_ PEVENT pEvent
);
1479 _Success_(return != 0)
1485 _In_ INT nFirstChar
,
1488 /* EngControlSprites.fl constants */
1489 #define ECS_TEARDOWN 0x00000001
1490 #define ECS_REDRAW 0x00000002
1496 _Inout_ WNDOBJ
*pwo
,
1503 _In_ SURFOBJ
*psoDest
,
1504 _In_ SURFOBJ
*psoSrc
,
1505 _In_opt_ CLIPOBJ
*pco
,
1506 _In_opt_ XLATEOBJ
*pxlo
,
1507 _In_
__in_data_source(USER_MODE
) RECTL
*prclDest
,
1508 _In_
__in_data_source(USER_MODE
) POINTL
*pptlSrc
);
1518 _In_opt_ PVOID pvBits
);
1523 EngCreateClip(VOID
);
1525 _Must_inspect_result_
1529 EngCreateDeviceBitmap(
1532 _In_ ULONG iFormatCompat
);
1534 _Must_inspect_result_
1538 EngCreateDeviceSurface(
1541 _In_ ULONG iFormatCompat
);
1543 _Must_inspect_result_
1549 _In_opt_ FREEOBJPROC pFreeObjProc
,
1552 _Must_inspect_result_
1553 _Success_(return != FALSE
)
1558 _Outptr_ PEVENT
*ppEvent
);
1560 /* EngCreatePalette.iMode constants */
1561 #define PAL_INDEXED 0x00000001
1562 #define PAL_BITFIELDS 0x00000002
1563 #define PAL_RGB 0x00000004
1564 #define PAL_BGR 0x00000008
1565 #define PAL_CMYK 0x00000010
1567 _Must_inspect_result_
1574 _In_ ULONG
*pulColors
,
1582 EngCreatePath(VOID
);
1584 __drv_allocatesMem(Mem
)
1585 _Post_writable_byte_size_(sizeof(ERESOURCE
))
1592 /* EngCreateWnd.fl constants */
1593 #define WO_RGN_CLIENT_DELTA 0x00000001
1594 #define WO_RGN_CLIENT 0x00000002
1595 #define WO_RGN_SURFACE_DELTA 0x00000004
1596 #define WO_RGN_SURFACE 0x00000008
1597 #define WO_RGN_UPDATE_ALL 0x00000010
1598 #define WO_RGN_WINDOW 0x00000020
1599 #define WO_DRAW_NOTIFY 0x00000040
1600 #define WO_SPRITE_NOTIFY 0x00000080
1601 #define WO_RGN_DESKTOP_COORD 0x00000100
1602 #if (NTDDI_VERSION >= NTDDI_VISTA)
1603 #define WO_RGN_SPRITE 0x00000200
1604 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
1606 _Must_inspect_result_
1613 _In_ WNDOBJCHANGEPROC pfn
,
1615 _In_ INT iPixelFormat
);
1621 EngDebugBreak(VOID
);
1627 _In_z_ PCHAR StandardPrefix
,
1628 _In_z_ PCHAR DebugMessage
,
1635 _In_ _Post_ptr_invalid_ CLIPOBJ
*pco
);
1641 _In_ _Post_ptr_invalid_ HDRVOBJ hdo
,
1642 _In_ BOOL bCallBack
,
1649 _In_ _Post_ptr_invalid_ PEVENT pEvent
);
1655 _In_ LPWSTR pwszFileName
);
1661 _In_ _Post_ptr_invalid_ HPALETTE hpal
);
1667 _In_ _Post_ptr_invalid_ PATHOBJ
*ppo
);
1672 EngDeleteSafeSemaphore(
1673 _Inout_ _Post_invalid_ ENGSAFESEMAPHORE
*pssem
);
1675 _Requires_lock_not_held_(*hsem
)
1680 _Inout_
__drv_freesMem(Mem
) HSEMAPHORE hsem
);
1686 _In_ _Post_ptr_invalid_ HSURF hsurf
);
1692 _In_ _Post_ptr_invalid_ WNDOBJ
*pwo
);
1694 _Success_(return==0)
1699 _In_ HANDLE hDevice
,
1700 _In_ DWORD dwIoControlCode
,
1701 _In_reads_bytes_opt_(cjInBufferSize
) LPVOID lpInBuffer
,
1702 _In_ DWORD cjInBufferSize
,
1703 _Out_writes_bytes_opt_(cjOutBufferSize
) LPVOID lpOutBuffer
,
1704 _In_ DWORD cjOutBufferSize
,
1705 _Out_ LPDWORD lpBytesReturned
);
1707 #define DM_DEFAULT 0x00000001
1708 #define DM_MONOCHROME 0x00000002
1717 _When_(iMode
== DM_DEFAULT
, _Out_writes_bytes_(16*8))
1718 _When_(iMode
== DM_MONOCHROME
, _Out_writes_bytes_(8))
1721 /* Obsolete in Windows 2000 and later */
1727 _Inout_ PVOID pBuffer
,
1728 _In_ ULONG ulBufferSize
);
1730 #ifdef USERMODE_DRIVER
1731 #define EngEnumForms EnumForms
1732 #else /* !USERMODE_DRIVER */
1737 _In_ HANDLE hPrinter
,
1739 _Out_writes_bytes_opt_(cbBuf
) LPBYTE pForm
,
1741 _Out_ LPDWORD pcbNeeded
,
1742 _Out_ LPDWORD pcReturned
);
1743 #endif /* !USERMODE_DRIVER */
1757 _Inout_ SURFOBJ
*pso
,
1761 _In_ POINTL
*pptlBrushOrg
,
1763 _In_ FLONG flOptions
);
1765 #ifdef USERMODE_DRIVER
1766 #define EngFindImageProcAddress(h, procname) ((PVOID) GetProcAddress(h, procname))
1767 #else /* !USERMODE_DRIVER */
1771 EngFindImageProcAddress(
1772 _In_ HANDLE hModule
,
1773 _In_ LPSTR lpProcName
);
1774 #endif /* !USERMODE_DRIVER */
1783 _Out_ PULONG pulSize
);
1785 _Must_inspect_result_
1786 _Ret_opt_bytecap_(cjSize
)
1791 _In_ ULONG ulFastCheckSum
,
1794 /* EngFntCacheFault.iFaultMode constants */
1795 #define ENG_FNT_CACHE_READ_FAULT 0x00000001
1796 #define ENG_FNT_CACHE_WRITE_FAULT 0x00000002
1802 _In_ ULONG ulFastCheckSum
,
1803 _In_ ULONG iFaultMode
);
1809 _In_ ULONG FastCheckSum
,
1810 _Out_ ULONG
*pulSize
);
1812 #ifdef USERMODE_DRIVER
1814 #define EngFreeMem(p) GlobalFree((HGLOBAL) (p))
1815 #define EngFreePrivateUserMem( psl, p) GlobalFree((HGLOBAL) (p))
1816 #define EngFreeUserMem(p) GlobalFree((HGLOBAL) (p))
1818 #else /* !USERMODE_DRIVER */
1824 _Pre_notnull_
__drv_freesMem(Mem
) PVOID pv
);
1829 EngFreePrivateUserMem(
1830 _In_ PDD_SURFACE_LOCAL psl
,
1831 _Pre_notnull_
__drv_freesMem(PrivateUserMem
) PVOID pv
);
1837 _Pre_notnull_
__drv_freesMem(UserMem
) PVOID pv
);
1839 #endif /* !USERMODE_DRIVER */
1845 _In_ _Post_invalid_ HANDLE h
);
1851 EngGetCurrentCodePage(
1852 _Out_ PUSHORT OemCodePage
,
1853 _Out_ PUSHORT AnsiCodePage
);
1858 EngGetCurrentProcessId(VOID
);
1863 EngGetCurrentThreadId(VOID
);
1865 _Must_inspect_result_ _Ret_z_
1875 EngGetFileChangeTime(
1877 _Out_ LARGE_INTEGER
*pChangeTime
);
1884 _Out_
WCHAR (*pDest
)[MAX_PATH
+1]);
1886 #ifdef USERMODE_DRIVER
1887 #define EngGetForm GetForm
1888 #define EngGetLastError GetLastError
1889 #define EngGetPrinter GetPrinter
1890 #define EngGetPrinterData GetPrinterData
1891 #else /* !USERMODE_DRIVER */
1896 _In_ HANDLE hPrinter
,
1897 _In_ LPWSTR pFormName
,
1899 _In_reads_bytes_opt_(cbBuf
) LPBYTE pForm
,
1901 _Out_ LPDWORD pcbNeeded
);
1906 EngGetLastError(VOID
);
1912 _In_ HANDLE hPrinter
,
1914 _Out_writes_bytes_opt_(cbBuf
) LPBYTE pPrinter
,
1916 _Out_ LPDWORD pcbNeeded
);
1922 _In_ HANDLE hPrinter
,
1923 _In_ LPWSTR pValueName
,
1924 _Out_opt_ LPDWORD pType
,
1925 _Out_writes_bytes_opt_(cjSize
) LPBYTE pData
,
1927 _Out_ LPDWORD pcjNeeded
);
1928 #endif /* !USERMODE_DRIVER */
1933 EngGetPrinterDataFileName(
1936 #ifdef USERMODE_DRIVER
1937 #define EngGetPrinterDriver GetPrinterDriver
1938 #else /* !USERMODE_DRIVER */
1942 EngGetPrinterDriver(
1943 _In_ HANDLE hPrinter
,
1944 _In_opt_ LPWSTR pEnvironment
,
1946 _Out_writes_bytes_opt_(cjBufSize
) BYTE
*lpbDrvInfo
,
1947 _In_ DWORD cjBufSize
,
1948 _Out_ DWORD
*pcjNeeded
);
1949 #endif /* !USERMODE_DRIVER */
1954 EngGetProcessHandle(VOID
);
1959 EngGetType1FontList(
1961 _Out_writes_bytes_opt_(cjType1Buffer
) TYPE1_FONT
*pType1Buffer
,
1962 _In_ ULONG cjType1Buffer
,
1963 _Out_ PULONG pulLocalFonts
,
1964 _Out_ PULONG pulRemoteFonts
,
1965 _Out_ LARGE_INTEGER
*pLastModified
);
1971 _Inout_ SURFOBJ
*psoDest
,
1973 _In_opt_ XLATEOBJ
*pxlo
,
1974 _In_ TRIVERTEX
*pVertex
,
1978 _In_ RECTL
*prclExtents
,
1979 _In_ POINTL
*pptlDitherOrg
,
1982 /* EngHangNotification return values */
1983 #define EHN_RESTORED 0x00000000
1984 #define EHN_ERROR 0x00000001
1989 EngHangNotification(
1991 _Reserved_ PVOID Reserved
);
1996 EngInitializeSafeSemaphore(
1997 _Out_ ENGSAFESEMAPHORE
*pssem
);
2002 EngIsSemaphoreOwned(
2003 _In_ HSEMAPHORE hsem
);
2008 EngIsSemaphoreOwnedByCurrentThread(
2009 _In_ HSEMAPHORE hsem
);
2015 _Inout_ SURFOBJ
*pso
,
2022 _In_opt_ RECTL
*prclBounds
,
2025 #ifdef USERMODE_DRIVER
2026 #define EngLoadImage(pwszDriver) ((HANDLE)LoadLibraryW(pwszDriver))
2027 #else /* !USERMODE_DRIVER */
2032 _In_ LPWSTR pwszDriver
);
2033 #endif /* !USERMODE_DRIVER */
2044 EngLoadModuleForWrite(
2046 _In_ ULONG cjSizeOfModule
);
2051 EngLockDirectDrawSurface(
2052 _In_ HANDLE hSurface
);
2069 EngLpkInstalled(VOID
);
2076 _In_ HANDLE hUserObject
,
2077 _Reserved_ PVOID Reserved1
,
2078 _Reserved_ PVOID Reserved2
,
2079 _Reserved_ PVOID Reserved3
);
2081 _Success_(return != 0)
2082 _When_(cjSize
!= 0, _At_(return, _Out_writes_bytes_(cjSize
)))
2089 _Out_ ULONG_PTR
*piFile
);
2091 __drv_preferredFunction("EngMapFontFileFD", "Obsolete")
2093 _Success_(return!=FALSE
)
2098 _In_ ULONG_PTR iFile
,
2099 _Outptr_result_bytebuffer_(*pcjBuf
) PULONG
*ppjBuf
,
2100 _Out_ ULONG
*pcjBuf
);
2103 _Success_(return!=FALSE
)
2108 _In_ ULONG_PTR iFile
,
2109 _Outptr_result_bytebuffer_(*pcjBuf
) PULONG
*ppjBuf
,
2110 _Out_ ULONG
*pcjBuf
);
2113 _Success_(return!=NULL
)
2114 _Post_writable_byte_size_(*pulSize
)
2120 _Out_ PULONG pulSize
);
2125 EngMarkBandingSurface(
2128 /* EngModifySurface.flSurface constants */
2129 #define MS_NOTSYSTEMMEMORY 0x00000001
2130 #define MS_SHAREDACCESS 0x00000002
2131 #define MS_CDDDEVICEBITMAP 0x00000004
2140 _In_ FLONG flSurface
,
2144 _Reserved_ PVOID pvReserved
);
2155 #ifdef USERMODE_DRIVER
2156 #define EngMulDiv MulDiv
2157 #else /* !USERMODE_DRIVER */
2165 #endif /* !USERMODE_DRIVER */
2170 EngMultiByteToUnicodeN(
2171 _Out_writes_bytes_to_(MaxBytesInUnicodeString
, *BytesInUnicodeString
) LPWSTR UnicodeString
,
2172 _In_ ULONG MaxBytesInUnicodeString
,
2173 _Out_opt_ PULONG BytesInUnicodeString
,
2174 _In_reads_bytes_(BytesInMultiByteString
) PCHAR MultiByteString
,
2175 _In_ ULONG BytesInMultiByteString
);
2180 EngMultiByteToWideChar(
2182 _Out_writes_bytes_opt_(cjWideCharString
) LPWSTR WideCharString
,
2183 _In_ INT cjWideCharString
,
2184 _In_reads_bytes_opt_(cjMultiByteString
) LPSTR MultiByteString
,
2185 _In_ INT cjMultiByteString
);
2194 _In_ POINTL
*pptlBrushOrg
,
2195 _In_
__in_data_source(USER_MODE
) MIX mix
);
2201 _In_ SURFOBJ
*psoTrg
,
2202 _In_ SURFOBJ
*psoSrc
,
2203 _In_opt_ SURFOBJ
*psoMsk
,
2205 _In_opt_ XLATEOBJ
*pxlo
,
2206 _In_ COLORADJUSTMENT
*pca
,
2207 _In_ POINTL
*pptlBrushOrg
,
2208 _In_ POINTFIX
*pptfx
,
2210 _When_(psoMsk
, _In_
) POINTL
*pptl
,
2211 _In_
__in_data_source(USER_MODE
) ULONG iMode
);
2217 _In_reads_bytes_(Length
) PVOID Address
,
2219 _In_ ULONG Alignment
);
2224 EngProbeForReadAndWrite(
2225 _Inout_updates_bytes_(Length
) PVOID Address
,
2227 _In_ ULONG Alignment
);
2229 typedef enum _ENG_DEVICE_ATTRIBUTE
{
2231 QDA_ACCELERATION_LEVEL
2232 } ENG_DEVICE_ATTRIBUTE
;
2237 EngQueryDeviceAttribute(
2239 _In_ ENG_DEVICE_ATTRIBUTE devAttr
,
2240 _In_reads_bytes_(cjInSize
) PVOID pvIn
,
2241 _In_ ULONG cjInSize
,
2242 _Out_writes_bytes_(cjOutSize
) PVOID pvOut
,
2243 _In_ ULONG cjOutSize
);
2245 /* Obsolete in Windows 2000 and later */
2246 DECLSPEC_DEPRECATED_DDK
2250 _Out_ EMFINFO
*pEMFInfo
);
2255 EngQueryFileTimeStamp(
2262 _Out_ PENG_TIME_FIELDS ptf
);
2269 _Out_ ULONG
*piMode
,
2271 _Out_writes_opt_(cColors
) ULONG
*pulColors
);
2276 EngQueryPerformanceCounter(
2277 _Out_ LONGLONG
*pPerformanceCount
);
2282 EngQueryPerformanceFrequency(
2283 _Out_ LONGLONG
*pFrequency
);
2285 typedef enum _ENG_SYSTEM_ATTRIBUTE
{
2286 EngProcessorFeature
= 1,
2287 EngNumberOfProcessors
,
2288 EngOptimumAvailableUserMemory
,
2289 EngOptimumAvailableSystemMemory
,
2290 } ENG_SYSTEM_ATTRIBUTE
;
2292 #define QSA_MMX 0x00000100
2293 #define QSA_SSE 0x00002000
2294 #define QSA_3DNOW 0x00004000
2295 #if (NTDDI_VERSION >= NTDDI_VISTA)
2296 #define QSA_SSE1 QSA_SSE
2297 #define QSA_SSE2 0x00010000
2298 #define QSA_SSE3 0x00080000
2299 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
2306 EngQuerySystemAttribute(
2307 _In_ ENG_SYSTEM_ATTRIBUTE CapNum
,
2308 _Out_ PDWORD pCapability
);
2314 _In_ PEVENT pEvent
);
2316 _Requires_lock_held_(*hsem
)
2317 _Releases_lock_(*hsem
)
2318 _Releases_lock_(_Global_critical_region_
)
2322 EngReleaseSemaphore(
2323 _Inout_ HSEMAPHORE hsem
);
2325 #if defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA)
2329 _Kernel_float_restored_
2330 _At_(*pBuffer
, _Kernel_requires_resource_held_(EngFloatState
)
2331 _Kernel_releases_resource_(EngFloatState
))
2335 EngRestoreFloatingPointState(
2336 _In_reads_(_Inexpressible_(statesize
))
2339 UNREFERENCED_PARAMETER(pBuffer
);
2344 _Success_(((pBuffer
!= NULL
&& cjBufferSize
!= 0) && return == 1) ||
2345 ((pBuffer
== NULL
|| cjBufferSize
== 0) && return > 0))
2346 _When_(pBuffer
!= NULL
&& cjBufferSize
!= 0 && return == 1, _Kernel_float_saved_
2347 _At_(*pBuffer
, _Post_valid_
_Kernel_acquires_resource_(EngFloatState
)))
2348 _On_failure_(_Post_satisfies_(return == 0))
2352 EngSaveFloatingPointState(
2353 _At_(*pBuffer
, _Kernel_requires_resource_not_held_(EngFloatState
))
2354 _Out_writes_bytes_opt_(cjBufferSize
) PVOID pBuffer
,
2355 _Inout_ ULONG cjBufferSize
)
2357 return ((((pBuffer
) == NULL
) || ((cjBufferSize
) == 0)) ? 8 : TRUE
);
2360 #else /* !(defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA)) */
2364 _Kernel_float_restored_
2365 _At_(*pBuffer
, _Kernel_requires_resource_held_(EngFloatState
)
2366 _Kernel_releases_resource_(EngFloatState
))
2370 EngRestoreFloatingPointState(
2371 _In_reads_(_Inexpressible_(statesize
)) PVOID pBuffer
);
2374 _Success_(((pBuffer
!= NULL
&& cjBufferSize
!= 0) && return == 1) ||
2375 ((pBuffer
== NULL
|| cjBufferSize
== 0) && return > 0))
2376 _When_(pBuffer
!= NULL
&& cjBufferSize
!= 0 && return == 1, _Kernel_float_saved_
2377 _At_(*pBuffer
, _Post_valid_
_Kernel_acquires_resource_(EngFloatState
)))
2378 _On_failure_(_Post_satisfies_(return == 0))
2382 EngSaveFloatingPointState(
2383 _At_(*pBuffer
, _Kernel_requires_resource_not_held_(EngFloatState
))
2384 _Out_writes_bytes_opt_(cjBufferSize
) PVOID pBuffer
,
2385 _Inout_ ULONG cjBufferSize
);
2388 #endif /* defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA) */
2394 _In_reads_bytes_(cjLength
) PVOID Address
,
2395 _In_ ULONG cjLength
);
2401 _In_ PEVENT pEvent
);
2403 #ifdef USERMODE_DRIVER
2404 #define EngSetLastError SetLastError
2405 #else /* !USERMODE_DRIVER */
2411 #endif /* !USERMODE_DRIVER */
2418 _In_opt_ SURFOBJ
*psoMask
,
2419 _In_opt_ SURFOBJ
*psoColor
,
2420 _In_opt_ XLATEOBJ
*pxlo
,
2428 __drv_preferredFunction("(see documentation)", "Obsolete, always returns false. ")
2434 _In_opt_ SURFOBJ
*psoMask
,
2435 _In_opt_ SURFOBJ
*psoColor
,
2436 _Reserved_ XLATEOBJ
*pxlo
,
2439 #ifdef USERMODE_DRIVER
2440 #define EngSetPrinterData SetPrinterData
2441 #else /* !USERMODE_DRIVER */
2446 _In_ HANDLE hPrinter
,
2449 _In_reads_bytes_(cjPrinterData
) LPBYTE lpbPrinterData
,
2450 _In_ DWORD cjPrinterData
);
2451 #endif /* !USERMODE_DRIVER */
2453 typedef int (__cdecl
/*CDECL*/ *SORTCOMP
)(const void *pv1
, const void *pv2
);
2459 _Inout_updates_bytes_(c
* cjElem
) PBYTE pjBuf
,
2462 _In_ SORTCOMP pfnComp
);
2468 _In_ SURFOBJ
*psoDest
,
2469 _In_ SURFOBJ
*psoSrc
,
2470 _In_opt_ SURFOBJ
*psoMask
,
2471 _In_opt_ CLIPOBJ
*pco
,
2472 _In_opt_ XLATEOBJ
*pxlo
,
2473 _In_opt_ COLORADJUSTMENT
*pca
,
2474 _In_ POINTL
*pptlHTOrg
,
2475 _In_ RECTL
*prclDest
,
2476 _In_ RECTL
*prclSrc
,
2477 _When_(psoMask
, _In_
) POINTL
*pptlMask
,
2484 _In_ SURFOBJ
*psoDest
,
2485 _In_ SURFOBJ
*psoSrc
,
2486 _In_opt_ SURFOBJ
*psoMask
,
2487 _In_opt_ CLIPOBJ
*pco
,
2488 _In_opt_ XLATEOBJ
*pxlo
,
2489 _In_opt_ COLORADJUSTMENT
*pca
,
2490 _In_ POINTL
*pptlHTOrg
,
2491 _In_ RECTL
*prclDest
,
2492 _In_ RECTL
*prclSrc
,
2493 _When_(psoMask
, _In_
) POINTL
*pptlMask
,
2495 _In_opt_ BRUSHOBJ
*pbo
,
2501 EngStrokeAndFillPath(
2502 _Inout_ SURFOBJ
*pso
,
2506 _In_ BRUSHOBJ
*pboStroke
,
2507 _In_ LINEATTRS
*plineattrs
,
2508 _In_ BRUSHOBJ
*pboFill
,
2509 _In_ POINTL
*pptlBrushOrg
,
2510 _In_
__in_data_source(USER_MODE
) MIX mixFill
,
2511 _In_
__in_data_source(USER_MODE
) FLONG flOptions
);
2522 _In_ POINTL
*pptlBrushOrg
,
2523 _In_ LINEATTRS
*plineattrs
,
2534 _Null_ RECTL
*prclExtra
,
2535 _In_opt_ RECTL
*prclOpaque
,
2536 _In_ BRUSHOBJ
*pboFore
,
2537 _In_ BRUSHOBJ
*pboOpaque
,
2538 _In_ POINTL
*pptlOrg
,
2545 _In_ SURFOBJ
*psoDst
,
2546 _In_ SURFOBJ
*psoSrc
,
2547 _In_opt_ CLIPOBJ
*pco
,
2548 _In_opt_ XLATEOBJ
*pxlo
,
2549 _In_ RECTL
*prclDst
,
2550 _In_ RECTL
*prclSrc
,
2551 _In_ ULONG iTransColor
,
2552 _In_ ULONG ulReserved
);
2557 EngUnicodeToMultiByteN(
2558 _Out_writes_bytes_to_(cjMultiByteBuf
, *pcjMultiByteString
) PCHAR pchMultiByteString
,
2559 _In_ ULONG cjMultiByteBuf
,
2560 _Out_opt_ PULONG pcjMultiByteString
,
2561 _In_reads_bytes_(cjUnicodeString
) PWSTR pwszUnicodeString
,
2562 _In_ ULONG cjUnicodeString
);
2564 #ifdef USERMODE_DRIVER
2565 #define EngUnloadImage(h) FreeLibrary((HMODULE) (h))
2566 #else /* !USERMODE_DRIVER */
2571 _In_ HANDLE hModule
);
2572 #endif /* !USERMODE_DRIVER */
2577 EngUnlockDirectDrawSurface(
2578 _In_ PDD_SURFACE_LOCAL pSurface
);
2584 _In_ _Post_ptr_invalid_ HDRVOBJ hdo
);
2590 _In_ _Post_ptr_invalid_ SURFOBJ
*pso
);
2596 _In_ PEVENT pEvent
);
2602 _In_ ULONG_PTR iFile
);
2604 __drv_preferredFunction("EngUnmapFontFileFD", "Obsolete")
2609 _In_ ULONG_PTR iFile
);
2615 _In_ ULONG_PTR iFile
);
2621 _In_ HANDLE hSecure
);
2626 EngWaitForSingleObject(
2628 _In_opt_ PLARGE_INTEGER pTimeOut
);
2633 EngWideCharToMultiByte(
2635 _In_reads_bytes_opt_(cjWideCharString
) LPWSTR pwszWideCharString
,
2636 _In_ INT cjWideCharString
,
2637 _Out_z_bytecap_(cjMultiByteString
) LPSTR pszMultiByteString
,
2638 _In_ INT cjMultiByteString
);
2640 #ifdef USERMODE_DRIVER
2641 #define EngWritePrinter WritePrinter
2642 #else /* !USERMODE_DRIVER */
2647 _In_ HANDLE hPrinter
,
2648 _In_reads_bytes_(cjBuf
) LPVOID pvBuf
,
2650 _Out_ LPDWORD pcWritten
);
2651 #endif /* !USERMODE_DRIVER */
2653 #if defined(_X86_) && !defined(USERMODE_DRIVER)
2658 _Inout_ PFLOATOBJ pf
,
2659 _In_ PFLOATOBJ pf1
);
2665 _Inout_ PFLOATOBJ pf
,
2672 _Inout_ PFLOATOBJ pf
,
2679 _Inout_ PFLOATOBJ pf
,
2680 _In_ PFLOATOBJ pf1
);
2686 _Inout_ PFLOATOBJ pf
,
2693 _Inout_ PFLOATOBJ pf
,
2701 _In_ PFLOATOBJ pf1
);
2725 FLOATOBJ_GreaterThan(
2727 _In_ PFLOATOBJ pf1
);
2732 FLOATOBJ_GreaterThanLong(
2741 _In_ PFLOATOBJ pf1
);
2746 FLOATOBJ_LessThanLong(
2754 _Inout_ PFLOATOBJ pf
,
2755 _In_ PFLOATOBJ pf1
);
2761 _Inout_ PFLOATOBJ pf
,
2768 _Inout_ PFLOATOBJ pf
,
2775 _Inout_ PFLOATOBJ pf
);
2795 _Inout_ PFLOATOBJ pf
,
2796 _In_ PFLOATOBJ pf1
);
2802 _Inout_ PFLOATOBJ pf
,
2809 _Inout_ PFLOATOBJ pf
,
2814 #define FLOATOBJ_SetFloat(pf, f) {*(pf) = (f);}
2815 #define FLOATOBJ_SetLong(pf, l) {*(pf) = (FLOAT)(l);}
2816 #define FLOATOBJ_GetFloat(pf) (*(PULONG)(pf))
2817 #define FLOATOBJ_GetLong(pf) ((LONG)*(pf))
2818 #define FLOATOBJ_Add(pf, pf1) {*(pf) += *(pf1);}
2819 #define FLOATOBJ_AddFloat(pf, f) {*(pf) += (f);}
2820 #define FLOATOBJ_AddLong(pf, l) {*(pf) += (l);}
2821 #define FLOATOBJ_Sub(pf, pf1) {*(pf) -= *(pf1);}
2822 #define FLOATOBJ_SubFloat(pf, f) {*(pf) -= (f);}
2823 #define FLOATOBJ_SubLong(pf, l) {*(pf) -= (l);}
2824 #define FLOATOBJ_Mul(pf, pf1) {*(pf) *= *(pf1);}
2825 #define FLOATOBJ_MulFloat(pf, f) {*(pf) *= (f);}
2826 #define FLOATOBJ_MulLong(pf, l) {*(pf) *= (l);}
2827 #define FLOATOBJ_Div(pf, pf1) {*(pf) /= *(pf1);}
2828 #define FLOATOBJ_DivFloat(pf, f) {*(pf) /= (f);}
2829 #define FLOATOBJ_DivLong(pf, l) {*(pf) /= (l);}
2830 #define FLOATOBJ_Neg(pf) {*(pf) = -(*(pf));}
2831 #define FLOATOBJ_Equal(pf, pf1) (*(pf) == *(pf1))
2832 #define FLOATOBJ_GreaterThan(pf, pf1) (*(pf) > *(pf1))
2833 #define FLOATOBJ_LessThan(pf, pf1) (*(pf) < *(pf1))
2834 #define FLOATOBJ_EqualLong(pf, l) (*(pf) == (FLOAT)(l))
2835 #define FLOATOBJ_GreaterThanLong(pf, l) (*(pf) > (FLOAT)(l))
2836 #define FLOATOBJ_LessThanLong(pf, l) (*(pf) < (FLOAT)(l))
2843 FONTOBJ_cGetAllGlyphHandles(
2845 _Out_opt_ HGLYPH
*phg
);
2854 _In_count_(cGlyph
) HGLYPH
*phg
,
2855 _Out_ PVOID
*ppvGlyph
);
2869 _Ret_opt_bytecount_(*pcjTable
)
2873 FONTOBJ_pjOpenTypeTablePointer(
2876 _Out_ ULONG
*pcjTable
);
2881 FONTOBJ_pQueryGlyphAttrs(
2885 _Ret_opt_bytecount_(*pcjFile
)
2889 FONTOBJ_pvTrueTypeFontFile(
2891 _Out_ ULONG
*pcjFile
);
2896 FONTOBJ_pwszFontFilePaths(
2903 FONTOBJ_pxoGetXform(
2912 _Out_bytecap_(cjSize
) FONTINFO
*pfi
);
2914 #if (NTDDI_VERSION <= NTDDI_WINXP)
2915 /* Obsolete in Windows 2000 and later */
2918 FONTOBJ_pGetGammaTables(
2925 HT_ComputeRGBGammaTable(
2926 _In_ USHORT GammaTableEntries
,
2927 _In_ USHORT GammaTableType
,
2928 _In_ USHORT RedGamma
,
2929 _In_ USHORT GreenGamma
,
2930 _In_ USHORT BlueGamma
,
2931 _Out_writes_bytes_(GammaTableEntries
* 3) LPBYTE pGammaTable
);
2936 HT_Get8BPPFormatPalette(
2937 _Out_opt_ LPPALETTEENTRY pPaletteEntry
,
2938 _In_ USHORT RedGamma
,
2939 _In_ USHORT GreenGamma
,
2940 _In_ USHORT BlueGamma
);
2945 HT_Get8BPPMaskPalette(
2946 _Out_opt_ LPPALETTEENTRY pPaletteEntry
,
2947 _In_ BOOL Use8BPPMaskPal
,
2949 _In_ USHORT RedGamma
,
2950 _In_ USHORT GreenGamma
,
2951 _In_ USHORT BlueGamma
);
2956 HTUI_DeviceColorAdjustment(
2957 _In_ LPSTR pDeviceName
,
2958 _Out_ PDEVHTADJDATA pDevHTAdjData
);
2967 _Out_writes_(cColors
) ULONG
*pulColors
);
2972 PATHOBJ_bCloseFigure(
2980 _Out_ PATHDATA
*ppd
);
2985 PATHOBJ_bEnumClipLines(
2988 _Out_bytecap_(cj
) CLIPLINE
*pcl
);
2995 _In_ POINTFIX ptfx
);
3000 PATHOBJ_bPolyBezierTo(
3002 _In_count_(cptfx
) POINTFIX
*pptfx
,
3008 PATHOBJ_bPolyLineTo(
3010 _In_count_(cptfx
) POINTFIX
*pptfx
,
3017 _Inout_ PATHOBJ
*ppo
);
3022 PATHOBJ_vEnumStartClipLines(
3023 _Inout_ PATHOBJ
*ppo
,
3026 _In_ LINEATTRS
*pla
);
3033 _Out_ PRECTFX prectfx
);
3039 _Inout_ STROBJ
*pstro
,
3041 _Out_ PGLYPHPOS
*ppgpos
); // FIXME_ size?
3046 STROBJ_bEnumPositionsOnly(
3049 _Out_ PGLYPHPOS
*ppgpos
); // FIXME_ size?
3054 STROBJ_bGetAdvanceWidths(
3058 _Out_cap_(c
) POINTQF
*pptqD
);
3063 STROBJ_dwGetCodePage(
3064 _In_ STROBJ
*pstro
);
3069 STROBJ_fxBreakExtra(
3070 _In_ STROBJ
*pstro
);
3075 STROBJ_fxCharacterExtra(
3076 _In_ STROBJ
*pstro
);
3082 _Inout_ STROBJ
*pstro
);
3088 _Inout_ WNDOBJ
*pwo
,
3090 _Out_bytecap_(cj
) ULONG
*pul
);
3096 _Inout_ WNDOBJ
*pwo
,
3098 _In_ ULONG iDirection
,
3104 WNDOBJ_vSetConsumer(
3105 _Inout_ WNDOBJ
*pwo
,
3106 _In_ PVOID pvConsumer
);
3108 /* XFORMOBJ_bApplyXform.iMode constants */
3110 #define XF_INV_LTOL 1L
3112 #define XF_INV_FXTOL 3L
3117 XFORMOBJ_bApplyXform(
3121 _In_reads_bytes_(cPoints
* sizeof(POINTL
)) PVOID pvIn
,
3122 _Out_writes_bytes_(cPoints
* sizeof(POINTL
)) PVOID pvOut
);
3124 /* Obsolete in Windows 2000 and later */
3125 DECLSPEC_DEPRECATED_DDK
3129 XFORMOBJ_cmGetTransform(
3132 #if !defined(USERMODE_DRIVER)
3136 XFORMOBJ_iGetFloatObjXform(
3138 _Out_ FLOATOBJ_XFORM
*pxfo
);
3140 #define XFORMOBJ_iGetFloatObjXform XFORMOBJ_iGetXform
3148 _Out_ XFORML
*pxform
);
3150 /* XLATEOBJ_cGetPalette.iPal constants */
3151 #define XO_SRCPALETTE 1
3152 #define XO_DESTPALETTE 2
3153 #define XO_DESTDCPALETTE 3
3154 #define XO_SRCBITFIELDS 4
3155 #define XO_DESTBITFIELDS 5
3160 XLATEOBJ_cGetPalette(
3161 _In_ XLATEOBJ
*pxlo
,
3164 _Out_cap_(cPal
) ULONG
*pPal
);
3169 XLATEOBJ_hGetColorTransform(
3170 _In_ XLATEOBJ
*pxlo
);
3176 _In_ XLATEOBJ
*pxlo
,
3183 _In_ XLATEOBJ
*pxlo
);
3185 #if (NTDDI_VERSION >= NTDDI_WINXPSP2)
3191 _In_ ULONG BugCheckCode
,
3197 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */
3199 #if (NTDDI_VERSION >= NTDDI_VISTA)
3220 _In_ HANDLE hrgnTrg
,
3221 _In_ HANDLE hrgnSrc1
,
3222 _In_ HANDLE hrgnSrc2
,
3229 _In_ HANDLE hrgnDst
,
3230 _In_ HANDLE hrgnSrc
);
3236 _In_ HANDLE hrgnResult
,
3244 _In_ HANDLE hrgnResult
,
3252 _In_ HANDLE hrgnResult
,
3260 _In_ HANDLE hrgnResult
,
3284 _Out_cap_(nCount
) LPRGNDATA lpRgnData
);
3316 _In_ ULONG NotifyCode
,
3318 _In_reads_bytes_opt_(Length
) PVOID Data
);
3320 _Requires_lock_not_held_(*hsem
)
3321 _Acquires_exclusive_lock_(*hsem
)
3322 _Acquires_lock_(_Global_critical_region_
)
3326 EngAcquireSemaphore(
3327 _Inout_ HSEMAPHORE hsem
);
3332 EngAcquireSemaphoreNoWait(
3333 _In_ HSEMAPHORE hsem
);
3335 _Acquires_lock_(_Global_critical_region_
)
3336 _Requires_lock_not_held_(*hsem
)
3337 _Acquires_shared_lock_(*hsem
)
3341 EngAcquireSemaphoreShared(
3342 _Inout_ HSEMAPHORE hsem
);
3347 EngIsSemaphoreSharedByCurrentThread(
3348 _In_ HSEMAPHORE hsem
);
3350 DECLARE_HANDLE(HFASTMUTEX
);
3362 _In_ HFASTMUTEX hfm
);
3367 EngAcquireFastMutex(
3368 _In_ HFASTMUTEX hfm
);
3373 EngReleaseFastMutex(
3374 _In_ HFASTMUTEX hfm
);
3379 EngUpdateDeviceSurface(
3381 _Inout_ CLIPOBJ
**ppco
);
3383 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
3385 #if (NTDDI_VERSION >= NTDDI_WIN7)
3390 EngCreateRedirectionDeviceBitmap(
3391 __in_data_source(USER_MODE
) DHSURF dhsurf
,
3392 __in_data_source(USER_MODE
) SIZEL sizl
,
3393 _In_ ULONG iFormatCompat
);
3399 _Out_ CONST BYTE
** pGammaTable
,
3400 _Out_ CONST BYTE
** pInverseGammaTable
);
3404 EngCTGetCurrentGamma(
3407 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
3409 /* Graphics Driver Functions */
3412 (APIENTRY FN_DrvAlphaBlend
)(
3413 _Inout_ SURFOBJ
*psoDest
,
3414 _In_ SURFOBJ
*psoSrc
,
3416 _In_opt_ XLATEOBJ
*pxlo
,
3417 _In_ RECTL
*prclDest
,
3418 _In_ RECTL
*prclSrc
,
3419 _In_ BLENDOBJ
*pBlendObj
);
3420 typedef FN_DrvAlphaBlend
*PFN_DrvAlphaBlend
;
3421 extern FN_DrvAlphaBlend DrvAlphaBlend
;
3424 (APIENTRY FN_DrvAssertMode
)(
3427 typedef FN_DrvAssertMode
*PFN_DrvAssertMode
;
3428 extern FN_DrvAssertMode DrvAssertMode
;
3431 (APIENTRY FN_DrvBitBlt
)(
3432 _Inout_ SURFOBJ
*psoTrg
,
3433 _In_opt_ SURFOBJ
*psoSrc
,
3434 _In_opt_ SURFOBJ
*psoMask
,
3436 _In_opt_ XLATEOBJ
*pxlo
,
3437 _In_ RECTL
*prclTrg
,
3438 _In_opt_ POINTL
*pptlSrc
,
3439 _In_opt_ POINTL
*pptlMask
,
3440 _In_opt_ BRUSHOBJ
*pbo
,
3441 _In_opt_ POINTL
*pptlBrush
,
3443 typedef FN_DrvBitBlt
*PFN_DrvBitBlt
;
3444 extern FN_DrvBitBlt DrvBitBlt
;
3447 (APIENTRY FN_DrvCompletePDEV
)(
3450 typedef FN_DrvCompletePDEV
*PFN_DrvCompletePDEV
;
3451 extern FN_DrvCompletePDEV DrvCompletePDEV
;
3454 (APIENTRY FN_DrvCopyBits
)(
3455 _In_ SURFOBJ
*psoDest
,
3456 _In_ SURFOBJ
*psoSrc
,
3458 _In_opt_ XLATEOBJ
*pxlo
,
3459 _In_ RECTL
*prclDest
,
3460 _In_ POINTL
*pptlSrc
);
3461 typedef FN_DrvCopyBits
*PFN_DrvCopyBits
;
3462 extern FN_DrvCopyBits DrvCopyBits
;
3465 (APIENTRY FN_DrvCreateDeviceBitmap
)(
3468 _In_ ULONG iFormat
);
3469 typedef FN_DrvCreateDeviceBitmap
*PFN_DrvCreateDeviceBitmap
;
3470 extern FN_DrvCreateDeviceBitmap DrvCreateDeviceBitmap
;
3473 (APIENTRY FN_DrvDeleteDeviceBitmap
)(
3474 _In_ _Post_ptr_invalid_ DHSURF dhsurf
);
3475 typedef FN_DrvDeleteDeviceBitmap
*PFN_DrvDeleteDeviceBitmap
;
3476 extern FN_DrvDeleteDeviceBitmap DrvDeleteDeviceBitmap
;
3479 (APIENTRY FN_DrvDeriveSurface
)(
3480 _In_ DD_DIRECTDRAW_GLOBAL
*pDirectDraw
,
3481 _In_ DD_SURFACE_LOCAL
*pSurface
);
3482 typedef FN_DrvDeriveSurface
*PFN_DrvDeriveSurface
;
3483 extern FN_DrvDeriveSurface DrvDeriveSurface
;
3486 (APIENTRY FN_DrvDescribePixelFormat
)(
3488 _In_ LONG iPixelFormat
,
3490 _Out_opt_ PIXELFORMATDESCRIPTOR
*ppfd
);
3491 typedef FN_DrvDescribePixelFormat
*PFN_DrvDescribePixelFormat
;
3492 extern FN_DrvDescribePixelFormat DrvDescribePixelFormat
;
3495 (APIENTRY FN_DrvDestroyFont
)(
3497 typedef FN_DrvDestroyFont
*PFN_DrvDestroyFont
;
3498 extern FN_DrvDestroyFont DrvDestroyFont
;
3501 (APIENTRY FN_DrvDisableDriver
)(VOID
);
3502 typedef FN_DrvDisableDriver
*PFN_DrvDisableDriver
;
3503 extern FN_DrvDisableDriver DrvDisableDriver
;
3506 (APIENTRY FN_DrvDisablePDEV
)(
3507 _In_ DHPDEV dhpdev
);
3508 typedef FN_DrvDisablePDEV
*PFN_DrvDisablePDEV
;
3509 extern FN_DrvDisablePDEV DrvDisablePDEV
;
3512 (APIENTRY FN_DrvDisableSurface
)(
3513 _In_ DHPDEV dhpdev
);
3514 typedef FN_DrvDisableSurface
*PFN_DrvDisableSurface
;
3515 extern FN_DrvDisableSurface DrvDisableSurface
;
3518 (APIENTRY FN_DrvDitherColor
)(
3522 _Inout_updates_(8 * 8) ULONG
*pul
); // FIXME: compare EngDitherColor
3523 typedef FN_DrvDitherColor
*PFN_DrvDitherColor
;
3524 extern FN_DrvDitherColor DrvDitherColor
;
3527 (APIENTRY FN_DrvDrawEscape
)(
3533 _In_reads_bytes_(cjIn
) PVOID pvIn
);
3534 typedef FN_DrvDrawEscape
*PFN_DrvDrawEscape
;
3535 extern FN_DrvDrawEscape DrvDrawEscape
;
3538 (APIENTRY FN_DrvEnableDriver
)(
3539 _In_ ULONG iEngineVersion
,
3541 _Inout_bytecount_(cj
) DRVENABLEDATA
*pded
); // Zero initialized
3542 typedef FN_DrvEnableDriver
*PFN_DrvEnableDriver
;
3543 extern FN_DrvEnableDriver DrvEnableDriver
;
3546 (APIENTRY FN_DrvEnablePDEV
)(
3548 _In_ LPWSTR pwszLogAddress
,
3550 _Out_opt_cap_(cPat
) HSURF
*phsurfPatterns
,
3552 _Out_bytecap_(cjCaps
) ULONG
*pdevcaps
,
3553 _In_ ULONG cjDevInfo
,
3556 _In_ LPWSTR pwszDeviceName
,
3557 _In_ HANDLE hDriver
);
3558 typedef FN_DrvEnablePDEV
*PFN_DrvEnablePDEV
;
3559 extern FN_DrvEnablePDEV DrvEnablePDEV
;
3562 (APIENTRY FN_DrvEnableSurface
)(
3563 _In_ DHPDEV dhpdev
);
3564 typedef FN_DrvEnableSurface
*PFN_DrvEnableSurface
;
3565 extern FN_DrvEnableSurface DrvEnableSurface
;
3567 /* DrvEndDoc.fl constants */
3568 #define ED_ABORTDOC 0x00000001
3571 (APIENTRY FN_DrvEndDoc
)(
3574 typedef FN_DrvEndDoc
*PFN_DrvEndDoc
;
3575 extern FN_DrvEndDoc DrvEndDoc
;
3578 (APIENTRY FN_DrvEscape
)(
3582 _In_bytecount_(cjIn
) PVOID pvIn
,
3584 _Out_bytecap_(cjOut
) PVOID pvOut
);
3585 typedef FN_DrvEscape
*PFN_DrvEscape
;
3586 extern FN_DrvEscape DrvEscape
;
3589 (APIENTRY FN_DrvFillPath
)(
3590 _Inout_ SURFOBJ
*pso
,
3594 _In_ POINTL
*pptlBrushOrg
,
3596 _In_ FLONG flOptions
);
3597 typedef FN_DrvFillPath
*PFN_DrvFillPath
;
3598 extern FN_DrvFillPath DrvFillPath
;
3601 (APIENTRY FN_DrvFontManagement
)(
3603 _In_opt_ FONTOBJ
*pfo
,
3606 _In_bytecount_(cjIn
) PVOID pvIn
,
3608 _Out_bytecap_(cjOut
) PVOID pvOut
);
3609 typedef FN_DrvFontManagement
*PFN_DrvFontManagement
;
3610 extern FN_DrvFontManagement DrvFontManagement
;
3613 (APIENTRY FN_DrvFree
)(
3614 _In_ _Post_ptr_invalid_ PVOID pv
,
3616 typedef FN_DrvFree
*PFN_DrvFree
;
3617 extern FN_DrvFree DrvFree
;
3619 /* DrvGetGlyphMode return values */
3620 #define FO_HGLYPHS 0L
3621 #define FO_GLYPHBITS 1L
3622 #define FO_PATHOBJ 2L
3625 (APIENTRY FN_DrvGetGlyphMode
)(
3628 typedef FN_DrvGetGlyphMode
*PFN_DrvGetGlyphMode
;
3629 extern FN_DrvGetGlyphMode DrvGetGlyphMode
;
3632 (APIENTRY FN_DrvGetModes
)(
3633 _In_ HANDLE hDriver
,
3635 _Out_opt_bytecap_(cjSize
) DEVMODEW
*pdm
);
3636 typedef FN_DrvGetModes
*PFN_DrvGetModes
;
3637 extern FN_DrvGetModes DrvGetModes
;
3640 (APIENTRY FN_DrvGetTrueTypeFile
)(
3641 _In_ ULONG_PTR iFile
,
3643 typedef FN_DrvGetTrueTypeFile
*PFN_DrvGetTrueTypeFile
;
3644 extern FN_DrvGetTrueTypeFile DrvGetTrueTypeFile
;
3647 (APIENTRY FN_DrvGradientFill
)(
3648 _Inout_ SURFOBJ
*psoDest
,
3650 _In_opt_ XLATEOBJ
*pxlo
,
3651 _In_ TRIVERTEX
*pVertex
,
3655 _In_ RECTL
*prclExtents
,
3656 _In_ POINTL
*pptlDitherOrg
,
3658 typedef FN_DrvGradientFill
*PFN_DrvGradientFill
;
3659 extern FN_DrvGradientFill DrvGradientFill
;
3662 (APIENTRY FN_DrvIcmCheckBitmapBits
)(
3664 _In_ HANDLE hColorTransform
,
3666 _Out_bytecap_(pso
->sizlBitmap
.cx
* pso
->sizlBitmap
.cy
) PBYTE paResults
);
3667 typedef FN_DrvIcmCheckBitmapBits
*PFN_DrvIcmCheckBitmapBits
;
3668 extern FN_DrvIcmCheckBitmapBits DrvIcmCheckBitmapBits
;
3671 (APIENTRY FN_DrvIcmCreateColorTransform
)(
3673 _In_ LPLOGCOLORSPACEW pLogColorSpace
,
3674 _In_reads_bytes_opt_(cjSourceProfile
) PVOID pvSourceProfile
,
3675 _In_ ULONG cjSourceProfile
,
3676 _In_reads_bytes_(cjDestProfile
) PVOID pvDestProfile
,
3677 _In_ ULONG cjDestProfile
,
3678 _In_reads_bytes_opt_(cjTargetProfile
) PVOID pvTargetProfile
,
3679 _In_ ULONG cjTargetProfile
,
3680 _In_ DWORD dwReserved
);
3681 typedef FN_DrvIcmCreateColorTransform
*PFN_DrvIcmCreateColorTransform
;
3682 extern FN_DrvIcmCreateColorTransform DrvIcmCreateColorTransform
;
3685 (APIENTRY FN_DrvIcmDeleteColorTransform
)(
3687 _In_ HANDLE hcmXform
);
3688 typedef FN_DrvIcmDeleteColorTransform
*PFN_DrvIcmDeleteColorTransform
;
3689 extern FN_DrvIcmDeleteColorTransform DrvIcmDeleteColorTransform
;
3691 /* DrvIcmSetDeviceGammaRamp.iFormat constants */
3692 #define IGRF_RGB_256BYTES 0x00000000
3693 #define IGRF_RGB_256WORDS 0x00000001
3696 (APIENTRY FN_DrvIcmSetDeviceGammaRamp
)(
3699 _In_bytecount_(sizeof(GAMMARAMP
)) LPVOID lpRamp
);
3700 typedef FN_DrvIcmSetDeviceGammaRamp
*PFN_DrvIcmSetDeviceGammaRamp
;
3701 extern FN_DrvIcmSetDeviceGammaRamp DrvIcmSetDeviceGammaRamp
;
3704 (APIENTRY FN_DrvLineTo
)(
3705 _Inout_ SURFOBJ
*pso
,
3712 _In_opt_ RECTL
*prclBounds
,
3714 typedef FN_DrvLineTo
*PFN_DrvLineTo
;
3715 extern FN_DrvLineTo DrvLineTo
;
3718 (APIENTRY FN_DrvLoadFontFile
)(
3720 _In_ ULONG_PTR
*piFile
,
3721 _In_count_(cFiles
) PVOID
*ppvView
,
3722 _In_count_(cFiles
) ULONG
*pcjView
,
3723 _In_opt_ DESIGNVECTOR
*pdv
,
3724 _In_ ULONG ulLangID
,
3725 _In_ ULONG ulFastCheckSum
);
3726 typedef FN_DrvLoadFontFile
*PFN_DrvLoadFontFile
;
3727 extern FN_DrvLoadFontFile DrvLoadFontFile
;
3730 (APIENTRY FN_DrvMovePointer
)(
3734 _In_opt_ RECTL
*prcl
);
3735 typedef FN_DrvMovePointer
*PFN_DrvMovePointer
;
3736 extern FN_DrvMovePointer DrvMovePointer
;
3739 (APIENTRY FN_DrvNextBand
)(
3742 typedef FN_DrvNextBand
*PFN_DrvNextBand
;
3743 extern FN_DrvNextBand DrvNextBand
;
3746 (APIENTRY FN_DrvNotify
)(
3749 _In_opt_ PVOID pvData
);
3750 typedef FN_DrvNotify
*PFN_DrvNotify
;
3751 extern FN_DrvNotify DrvNotify
;
3754 (APIENTRY FN_DrvOffset
)(
3758 _In_ FLONG flReserved
);
3759 typedef FN_DrvOffset
*PFN_DrvOffset
;
3760 extern FN_DrvOffset DrvOffset
;
3763 (APIENTRY FN_DrvPaint
)(
3764 _Inout_ SURFOBJ
*pso
,
3767 _In_ POINTL
*pptlBrushOrg
,
3769 typedef FN_DrvPaint
*PFN_DrvPaint
;
3770 extern FN_DrvPaint DrvPaint
;
3773 (APIENTRY FN_DrvPlgBlt
)(
3774 _Inout_ SURFOBJ
*psoTrg
,
3775 _Inout_ SURFOBJ
*psoSrc
,
3776 _In_opt_ SURFOBJ
*psoMsk
,
3778 _In_opt_ XLATEOBJ
*pxlo
,
3779 _In_opt_ COLORADJUSTMENT
*pca
,
3780 _In_opt_ POINTL
*pptlBrushOrg
,
3781 _In_ POINTFIX
*pptfx
,
3783 _In_opt_ POINTL
*pptl
,
3785 typedef FN_DrvPlgBlt
*PFN_DrvPlgBlt
;
3786 extern FN_DrvPlgBlt DrvPlgBlt
;
3788 /* DrvQueryAdvanceWidths.iMode constants */
3789 #define QAW_GETWIDTHS 0
3790 #define QAW_GETEASYWIDTHS 1
3793 (APIENTRY FN_DrvQueryAdvanceWidths
)(
3797 _In_reads_(cGlyphs
) HGLYPH
*phg
,
3798 _Out_writes_bytes_(cGlyphs
* sizeof(USHORT
)) PVOID pvWidths
,
3799 _In_ ULONG cGlyphs
);
3800 typedef FN_DrvQueryAdvanceWidths
*PFN_DrvQueryAdvanceWidths
;
3801 extern FN_DrvQueryAdvanceWidths DrvQueryAdvanceWidths
;
3803 /* DrvQueryDeviceSupport.iType constants */
3804 #define QDS_CHECKJPEGFORMAT 0x00000000
3805 #define QDS_CHECKPNGFORMAT 0x00000001
3808 (APIENTRY FN_DrvQueryDeviceSupport
)(
3810 _In_ XLATEOBJ
*pxlo
,
3814 _In_bytecount_(cjIn
) PVOID pvIn
,
3816 _Out_bytecap_(cjOut
) PVOID pvOut
);
3817 typedef FN_DrvQueryDeviceSupport
*PFN_DrvQueryDeviceSupport
;
3818 extern FN_DrvQueryDeviceSupport DrvQueryDeviceSupport
;
3820 /* DrvQueryDriverInfo.dwMode constants */
3821 #define DRVQUERY_USERMODE 0x00000001
3824 (APIENTRY FN_DrvQueryDriverInfo
)(
3826 _Out_bytecap_(cjBuf
) PVOID pBuffer
,
3828 _Out_ PDWORD pcbNeeded
);
3829 typedef FN_DrvQueryDriverInfo
*PFN_DrvQueryDriverInfo
;
3830 extern FN_DrvQueryDriverInfo DrvQueryDriverInfo
;
3833 (APIENTRY FN_DrvQueryFont
)(
3835 _In_ ULONG_PTR iFile
,
3837 _Out_ ULONG_PTR
*pid
);
3838 typedef FN_DrvQueryFont
*PFN_DrvQueryFont
;
3839 extern FN_DrvQueryFont DrvQueryFont
;
3841 /* DrvQueryFontCaps.pulCaps constants */
3842 #define QC_OUTLINES 0x00000001
3843 #define QC_1BIT 0x00000002
3844 #define QC_4BIT 0x00000004
3845 #define QC_FONTDRIVERCAPS (QC_OUTLINES | QC_1BIT | QC_4BIT)
3848 (APIENTRY FN_DrvQueryFontCaps
)(
3850 _Out_cap_(culCaps
) ULONG
*pulCaps
);
3851 typedef FN_DrvQueryFontCaps
*PFN_DrvQueryFontCaps
;
3852 extern FN_DrvQueryFontCaps DrvQueryFontCaps
;
3854 /* DrvQueryFontData.iMode constants */
3855 #define QFD_GLYPHANDBITMAP 1L
3856 #define QFD_GLYPHANDOUTLINE 2L
3857 #define QFD_MAXEXTENTS 3L
3858 #define QFD_TT_GLYPHANDBITMAP 4L
3859 #define QFD_TT_GRAY1_BITMAP 5L
3860 #define QFD_TT_GRAY2_BITMAP 6L
3861 #define QFD_TT_GRAY4_BITMAP 8L
3862 #define QFD_TT_GRAY8_BITMAP 9L
3864 #define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP
3867 (APIENTRY FN_DrvQueryFontData
)(
3872 _In_opt_ GLYPHDATA
*pgd
,
3873 _Out_bytecap_(cjSize
) PVOID pv
,
3875 typedef FN_DrvQueryFontData
*PFN_DrvQueryFontData
;
3876 extern FN_DrvQueryFontData DrvQueryFontData
;
3878 /* DrvQueryFontFile.ulMode constants */
3879 #define QFF_DESCRIPTION 0x00000001
3880 #define QFF_NUMFACES 0x00000002
3883 (APIENTRY FN_DrvQueryFontFile
)(
3884 _In_ ULONG_PTR iFile
,
3887 _Out_bytecap_(cjBuf
) ULONG
*pulBuf
);
3888 typedef FN_DrvQueryFontFile
*PFN_DrvQueryFontFile
;
3889 extern FN_DrvQueryFontFile DrvQueryFontFile
;
3891 /* DrvQueryFontTree.iMode constants */
3892 #define QFT_UNICODE 0L
3893 #define QFT_LIGATURES 1L
3894 #define QFT_KERNPAIRS 2L
3895 #define QFT_GLYPHSET 3L
3898 (APIENTRY FN_DrvQueryFontTree
)(
3900 _In_ ULONG_PTR iFile
,
3903 _Out_ ULONG_PTR
*pid
);
3904 typedef FN_DrvQueryFontTree
*PFN_DrvQueryFontTree
;
3905 extern FN_DrvQueryFontTree DrvQueryFontTree
;
3907 typedef PFD_GLYPHATTR
3908 (APIENTRY FN_DrvQueryGlyphAttrs
)(
3911 typedef FN_DrvQueryGlyphAttrs
*PFN_DrvQueryGlyphAttrs
;
3912 extern FN_DrvQueryGlyphAttrs DrvQueryGlyphAttrs
;
3915 (APIENTRY FN_DrvQueryPerBandInfo
)(
3917 _Inout_ PERBANDINFO
*pbi
);
3918 typedef FN_DrvQueryPerBandInfo
*PFN_DrvQueryPerBandInfo
;
3919 extern FN_DrvQueryPerBandInfo DrvQueryPerBandInfo
;
3921 /* DrvQueryTrueTypeOutline.bMetricsOnly constants */
3922 #define TTO_METRICS_ONLY 0x00000001
3923 #define TTO_QUBICS 0x00000002
3924 #define TTO_UNHINTED 0x00000004
3927 (APIENTRY FN_DrvQueryTrueTypeOutline
)(
3931 _In_ BOOL bMetricsOnly
,
3932 _Out_opt_ GLYPHDATA
*pgldt
,
3934 _Out_bytecap_(cjBuf
) TTPOLYGONHEADER
*ppoly
);
3935 typedef FN_DrvQueryTrueTypeOutline
*PFN_DrvQueryTrueTypeOutline
;
3936 extern FN_DrvQueryTrueTypeOutline DrvQueryTrueTypeOutline
;
3939 (APIENTRY FN_DrvQueryTrueTypeTable
)(
3940 _In_ ULONG_PTR iFile
,
3943 _In_ PTRDIFF dpStart
,
3945 _Out_opt_bytecap_(cjBuf
) BYTE
*pjBuf
,
3946 _Outptr_opt_result_bytebuffer_all_maybenull_(*pcjTable
) PBYTE
*ppjTable
,
3947 _Out_opt_ ULONG
*pcjTable
);
3948 typedef FN_DrvQueryTrueTypeTable
*PFN_DrvQueryTrueTypeTable
;
3949 extern FN_DrvQueryTrueTypeTable DrvQueryTrueTypeTable
;
3951 /* DrvRealizeBrush.iHatch constants */
3952 #define RB_DITHERCOLOR 0x80000000L
3954 #define HS_DDI_MAX 6
3957 (APIENTRY FN_DrvRealizeBrush
)(
3959 _Inout_ SURFOBJ
*psoTarget
, // CHECKME
3960 _In_opt_ SURFOBJ
*psoPattern
,
3961 _In_opt_ SURFOBJ
*psoMask
,
3962 _In_opt_ XLATEOBJ
*pxlo
,
3964 typedef FN_DrvRealizeBrush
*PFN_DrvRealizeBrush
;
3965 extern FN_DrvRealizeBrush DrvRealizeBrush
;
3967 /* DrvResetDevice return values */
3968 #define DRD_SUCCESS 0
3972 (APIENTRY FN_DrvResetDevice
)(
3974 _Reserved_ PVOID Reserved
);
3975 typedef FN_DrvResetDevice
*PFN_DrvResetDevice
;
3976 extern FN_DrvResetDevice DrvResetDevice
;
3979 (APIENTRY FN_DrvResetPDEV
)(
3980 _In_ DHPDEV dhpdevOld
,
3981 _In_ DHPDEV dhpdevNew
);
3982 typedef FN_DrvResetPDEV
*PFN_DrvResetPDEV
;
3983 extern FN_DrvResetPDEV DrvResetPDEV
;
3985 /* DrvSaveScreenBits.iMode constants */
3986 #define SS_SAVE 0x00000000
3987 #define SS_RESTORE 0x00000001
3988 #define SS_FREE 0x00000002
3991 (APIENTRY FN_DrvSaveScreenBits
)(
3994 _In_ ULONG_PTR ident
,
3996 typedef FN_DrvSaveScreenBits
*PFN_DrvSaveScreenBits
;
3997 extern FN_DrvSaveScreenBits DrvSaveScreenBits
;
4000 (APIENTRY FN_DrvSendPage
)(
4002 typedef FN_DrvSendPage
*PFN_DrvSendPage
;
4003 extern FN_DrvSendPage DrvSendPage
;
4005 /* DrvSetPalette range */
4006 #define WINDDI_MAXSETPALETTECOLORS 256
4007 #define WINDDI_MAXSETPALETTECOLORINDEX 255
4010 (APIENTRY FN_DrvSetPalette
)(
4014 _In_range_(0, WINDDI_MAXSETPALETTECOLORINDEX
) ULONG iStart
,
4015 _In_range_(0, WINDDI_MAXSETPALETTECOLORS
- iStart
) ULONG cColors
);
4016 typedef FN_DrvSetPalette
*PFN_DrvSetPalette
;
4017 extern FN_DrvSetPalette DrvSetPalette
;
4020 (APIENTRY FN_DrvSetPixelFormat
)(
4022 _In_ LONG iPixelFormat
,
4024 typedef FN_DrvSetPixelFormat
*PFN_DrvSetPixelFormat
;
4025 extern FN_DrvSetPixelFormat DrvSetPixelFormat
;
4027 /* DrvSetPointerShape return values */
4028 #define SPS_ERROR 0x00000000
4029 #define SPS_DECLINE 0x00000001
4030 #define SPS_ACCEPT_NOEXCLUDE 0x00000002
4031 #define SPS_ACCEPT_EXCLUDE 0x00000003
4032 #define SPS_ACCEPT_SYNCHRONOUS 0x00000004
4034 /* DrvSetPointerShape.fl constants */
4035 #define SPS_CHANGE 0x00000001L
4036 #define SPS_ASYNCCHANGE 0x00000002L
4037 #define SPS_ANIMATESTART 0x00000004L
4038 #define SPS_ANIMATEUPDATE 0x00000008L
4039 #define SPS_ALPHA 0x00000010L
4040 #define SPS_RESERVED 0x00000020L /* Force s/w cursor rendering */
4041 #define SPS_RESERVED1 0x00000040L /* Force show/hide system cursor */
4042 #define SPS_FLAGSMASK 0x000000FFL
4043 #define SPS_LENGTHMASK 0x00000F00L
4044 #define SPS_FREQMASK 0x000FF000L
4047 (APIENTRY FN_DrvSetPointerShape
)(
4049 _In_opt_ SURFOBJ
*psoMask
,
4050 _In_opt_ SURFOBJ
*psoColor
,
4051 _In_ XLATEOBJ
*pxlo
,
4058 typedef FN_DrvSetPointerShape
*PFN_DrvSetPointerShape
;
4059 extern FN_DrvSetPointerShape DrvSetPointerShape
;
4062 (APIENTRY FN_DrvStartBanding
)(
4065 typedef FN_DrvStartBanding
*PFN_DrvStartBanding
;
4066 extern FN_DrvStartBanding DrvStartBanding
;
4069 (APIENTRY FN_DrvStartDoc
)(
4071 _In_ LPWSTR pwszDocName
,
4072 _In_ DWORD dwJobId
);
4073 typedef FN_DrvStartDoc
*PFN_DrvStartDoc
;
4074 extern FN_DrvStartDoc DrvStartDoc
;
4077 (APIENTRY FN_DrvStartPage
)(
4079 typedef FN_DrvStartPage
*PFN_DrvStartPage
;
4080 extern FN_DrvStartPage DrvStartPage
;
4083 (APIENTRY FN_DrvStretchBlt
)(
4084 _Inout_ SURFOBJ
*psoDest
,
4085 _Inout_ SURFOBJ
*psoSrc
,
4086 _In_opt_ SURFOBJ
*psoMask
,
4088 _In_opt_ XLATEOBJ
*pxlo
,
4089 _In_opt_ COLORADJUSTMENT
*pca
,
4090 _In_ POINTL
*pptlHTOrg
,
4091 _In_ RECTL
*prclDest
,
4092 _In_ RECTL
*prclSrc
,
4093 _When_(psoMask
, _In_
) POINTL
*pptlMask
,
4095 typedef FN_DrvStretchBlt
*PFN_DrvStretchBlt
;
4096 extern FN_DrvStretchBlt DrvStretchBlt
;
4099 (APIENTRY FN_DrvStretchBltROP
)(
4100 _Inout_ SURFOBJ
*psoDest
,
4101 _Inout_ SURFOBJ
*psoSrc
,
4102 _In_opt_ SURFOBJ
*psoMask
,
4104 _In_opt_ XLATEOBJ
*pxlo
,
4105 _In_opt_ COLORADJUSTMENT
*pca
,
4106 _In_ POINTL
*pptlHTOrg
,
4107 _In_ RECTL
*prclDest
,
4108 _In_ RECTL
*prclSrc
,
4109 _When_(psoMask
, _In_
) POINTL
*pptlMask
,
4113 typedef FN_DrvStretchBltROP
*PFN_DrvStretchBltROP
;
4114 extern FN_DrvStretchBltROP DrvStretchBltROP
;
4117 (APIENTRY FN_DrvStrokeAndFillPath
)(
4118 _Inout_ SURFOBJ
*pso
,
4119 _Inout_ PATHOBJ
*ppo
,
4121 _In_opt_ XFORMOBJ
*pxo
,
4122 _In_ BRUSHOBJ
*pboStroke
,
4123 _In_ LINEATTRS
*plineattrs
,
4124 _In_ BRUSHOBJ
*pboFill
,
4125 _In_ POINTL
*pptlBrushOrg
,
4127 _In_ FLONG flOptions
);
4128 typedef FN_DrvStrokeAndFillPath
*PFN_DrvStrokeAndFillPath
;
4129 extern FN_DrvStrokeAndFillPath DrvStrokeAndFillPath
;
4132 (APIENTRY FN_DrvStrokePath
)(
4133 _Inout_ SURFOBJ
*pso
,
4136 _In_opt_ XFORMOBJ
*pxo
,
4138 _In_ POINTL
*pptlBrushOrg
,
4139 _In_ LINEATTRS
*plineattrs
,
4141 typedef FN_DrvStrokePath
*PFN_DrvStrokePath
;
4142 extern FN_DrvStrokePath DrvStrokePath
;
4145 (APIENTRY FN_DrvSwapBuffers
)(
4148 typedef FN_DrvSwapBuffers
*PFN_DrvSwapBuffers
;
4149 extern FN_DrvSwapBuffers DrvSwapBuffers
;
4152 (APIENTRY FN_DrvSynchronize
)(
4154 _In_count_c_(0) RECTL
*prcl
); // should be ignored
4155 typedef FN_DrvSynchronize
*PFN_DrvSynchronize
;
4156 extern FN_DrvSynchronize DrvSynchronize
;
4158 /* DrvSynchronizeSurface.fl constants */
4159 #define DSS_TIMER_EVENT 0x00000001
4160 #define DSS_FLUSH_EVENT 0x00000002
4161 #define DSS_RESERVED 0x00000004
4162 #define DSS_RESERVED1 0x00000008
4165 (APIENTRY FN_DrvSynchronizeSurface
)(
4167 _In_opt_ RECTL
*prcl
,
4169 typedef FN_DrvSynchronizeSurface
*PFN_DrvSynchronizeSurface
;
4170 extern FN_DrvSynchronizeSurface DrvSynchronizeSurface
;
4173 (APIENTRY FN_DrvTextOut
)(
4178 _Null_ RECTL
*prclExtra
,
4179 _In_opt_ RECTL
*prclOpaque
,
4180 _In_ BRUSHOBJ
*pboFore
,
4181 _In_ BRUSHOBJ
*pboOpaque
,
4182 _In_ POINTL
*pptlOrg
,
4184 typedef FN_DrvTextOut
*PFN_DrvTextOut
;
4185 extern FN_DrvTextOut DrvTextOut
;
4188 (APIENTRY FN_DrvTransparentBlt
)(
4189 _Inout_ SURFOBJ
*psoDst
,
4190 _In_ SURFOBJ
*psoSrc
,
4192 _In_opt_ XLATEOBJ
*pxlo
,
4193 _In_ RECTL
*prclDst
,
4194 _In_ RECTL
*prclSrc
,
4195 _In_ ULONG iTransColor
,
4196 _In_ ULONG ulReserved
);
4197 typedef FN_DrvTransparentBlt
*PFN_DrvTransparentBlt
;
4198 extern FN_DrvTransparentBlt DrvTransparentBlt
;
4201 (APIENTRY FN_DrvUnloadFontFile
)(
4202 _In_ ULONG_PTR iFile
);
4203 typedef FN_DrvUnloadFontFile
*PFN_DrvUnloadFontFile
;
4204 extern FN_DrvUnloadFontFile DrvUnloadFontFile
;
4209 (APIENTRY FN_DrvDisableDirectDraw
)(
4210 _In_ DHPDEV dhpdev
);
4211 typedef FN_DrvDisableDirectDraw
*PFN_DrvDisableDirectDraw
;
4212 extern FN_DrvDisableDirectDraw DrvDisableDirectDraw
;
4215 (APIENTRY FN_DrvEnableDirectDraw
)(
4217 _Out_ DD_CALLBACKS
*pCallBacks
,
4218 _Out_ DD_SURFACECALLBACKS
*pSurfaceCallBacks
,
4219 _Out_ DD_PALETTECALLBACKS
*pPaletteCallBacks
);
4220 typedef FN_DrvEnableDirectDraw
*PFN_DrvEnableDirectDraw
;
4221 extern FN_DrvEnableDirectDraw DrvEnableDirectDraw
;
4224 (APIENTRY FN_DrvGetDirectDrawInfo
)(
4226 _Out_ DD_HALINFO
*pHalInfo
,
4227 _Out_ DWORD
*pdwNumHeaps
,
4228 _Out_ VIDEOMEMORY
*pvmList
,
4229 _Out_ DWORD
*pdwNumFourCCCodes
,
4230 _Out_ DWORD
*pdwFourCC
);
4231 typedef FN_DrvGetDirectDrawInfo
*PFN_DrvGetDirectDrawInfo
;
4232 extern FN_DrvGetDirectDrawInfo DrvGetDirectDrawInfo
;
4234 typedef BOOL
//DECLSPEC_DEPRECATED_DDK
4235 (APIENTRY FN_DrvQuerySpoolType
)(
4237 _In_ LPWSTR pwchType
);
4238 typedef FN_DrvQuerySpoolType
*PFN_DrvQuerySpoolType
;
4239 extern FN_DrvQuerySpoolType DrvQuerySpoolType
;
4242 (APIENTRY FN_DrvQueryTrueTypeSection
)(
4248 typedef FN_DrvQueryTrueTypeSection
*PFN_DrvQueryTrueTypeSection
;
4249 extern FN_DrvQueryTrueTypeSection DrvQueryTrueTypeSection
;
4251 DECLSPEC_DEPRECATED_DDK
4253 (APIENTRY FN_DrvMovePanning
)(
4257 typedef FN_DrvMovePanning
*PFN_DrvMovePanning
;
4258 extern FN_DrvMovePanning DrvMovePanning
;
4260 #if (NTDDI_VERSION >= NTDDI_VISTA)
4263 (APIENTRY FN_DrvRenderHint
)(
4265 _In_ ULONG NotifyCode
,
4267 _In_reads_bytes_opt_(Length
) PVOID Data
);
4268 typedef FN_DrvRenderHint
*PFN_DrvRenderHint
;
4269 extern FN_DrvRenderHint DrvRenderHint
;
4271 typedef struct _DRH_APIBITMAPDATA
4275 } DRH_APIBITMAPDATA
, *PDRH_APIBITMAPDATA
;
4277 #define DRH_APIBITMAP 0x00000001
4280 (APIENTRY FN_EngCreateRectRgn
)(
4285 typedef FN_EngCreateRectRgn
*PFN_EngCreateRectRgn
;
4288 (APIENTRY FN_EngDeleteRgn
)(
4290 typedef FN_EngDeleteRgn
*PFN_EngDeleteRgn
;
4293 (APIENTRY FN_EngCombineRgn
)(
4294 _In_ HANDLE hrgnTrg
,
4295 _In_ HANDLE hrgnSrc1
,
4296 _In_ HANDLE hrgnSrc2
,
4298 typedef FN_EngCombineRgn
*PFN_EngCombineRgn
;
4301 (APIENTRY FN_EngCopyRgn
)(
4302 _In_ HANDLE hrgnDst
,
4303 _In_ HANDLE hrgnSrc
);
4304 typedef FN_EngCopyRgn
*PFN_EngCopyRgn
;
4307 (APIENTRY FN_EngIntersectRgn
)(
4308 _In_ HANDLE hrgnResult
,
4311 typedef FN_EngIntersectRgn
*PFN_EngIntersectRgn
;
4314 (APIENTRY FN_EngSubtractRgn
)(
4315 _In_ HANDLE hrgnResult
,
4318 typedef FN_EngSubtractRgn
*PFN_EngSubtractRgn
;
4321 (APIENTRY FN_EngUnionRgn
)(
4322 _In_ HANDLE hrgnResult
,
4325 typedef FN_EngUnionRgn
*PFN_EngUnionRgn
;
4328 (APIENTRY FN_EngXorRgn
)(
4329 _In_ HANDLE hrgnResult
,
4332 typedef FN_EngXorRgn
*PFN_EngXorRgn
;
4334 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */
4336 #if (NTDDI_VERSION >= NTDDI_WIN7)
4338 /* DrvCreateDeviceBitmapEx() flags */
4339 #define CDBEX_REDIRECTION 0x00000001
4340 #define CDBEX_DXINTEROP 0x00000002
4343 (APIENTRY FN_DrvCreateDeviceBitmapEx
)(
4348 _In_ DHSURF dhsurfGroup
,
4349 _In_ DWORD DxFormat
,
4350 #if (NTDDI_VERSION >= NTDDI_WIN8)
4351 _In_ DWORD SubresourceIndex
,
4352 #endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
4353 _Out_ HANDLE
* phSharedSurface
);
4354 typedef FN_DrvCreateDeviceBitmapEx
*PFN_DrvCreateDeviceBitmapEx
;
4355 extern DrvCreateDeviceBitmapEx DrvCreateDeviceBitmapEx
4358 (APIENTRY FN_DrvDeleteDeviceBitmapEx
)(
4360 typedef FN_DrvDeleteDeviceBitmapEx
*PFN_DrvDeleteDeviceBitmapEx
;
4361 extern FN_DrvDeleteDeviceBitmapEx DrvDeleteDeviceBitmapEx
;
4364 (APIENTRY FN_DrvAssociateSharedSurface
)(
4365 _In_ SURFOBJ
* psoSurf
,
4366 _In_ HANDLE hPhysicalSurface
,
4367 _In_ HANDLE hLogicalSurface
,
4369 typedef FN_DrvAssociateSharedSurface
*PFN_DrvAssociateSharedSurface
;
4370 extern FN_DrvAssociateSharedSurface DrvAssociateSharedSurface
;
4373 (APIENTRY FN_DrvSynchronizeRedirectionBitmaps
)(
4375 _Out_ UINT64
* puiFenceID
);
4376 typedef FN_DrvSynchronizeRedirectionBitmaps
*PFN_DrvSynchronizeRedirectionBitmaps
;
4377 extern FN_DrvSynchronizeRedirectionBitmaps DrvSynchronizeRedirectionBitmaps
;
4379 #define WINDDI_MAX_BROADCAST_CONTEXT 64
4380 typedef struct tagCDDDXGK_REDIRBITMAPPRESENTINFO
4385 HANDLE hContext
[WINDDI_MAX_BROADCAST_CONTEXT
+1];
4386 } CDDDXGK_REDIRBITMAPPRESENTINFO
;
4389 (APIENTRY FN_DrvAccumulateD3DDirtyRect
)(
4390 _In_ SURFOBJ
* psoSurf
,
4391 _In_ CDDDXGK_REDIRBITMAPPRESENTINFO
* pDirty
);
4392 typedef FN_DrvAccumulateD3DDirtyRect
*PFN_DrvAccumulateD3DDirtyRect
;
4393 extern FN_DrvAccumulateD3DDirtyRect DrvAccumulateD3DDirtyRect
;
4396 (APIENTRY FN_DrvStartDxInterop
)(
4397 _In_ SURFOBJ
* psoSurf
,
4399 _In_ PVOID KernelModeDeviceHandle
);
4400 typedef FN_DrvStartDxInterop
*PFN_DrvStartDxInterop
;
4401 extern FN_DrvStartDxInterop DrvStartDxInterop
;
4404 (APIENTRY FN_DrvEndDxInterop
)(
4405 _In_ SURFOBJ
* psoSurf
,
4407 _Out_ BOOL
* bDeviceLost
,
4408 _In_ PVOID KernelModeDeviceHandle
);
4409 typedef FN_DrvEndDxInterop
*PFN_DrvEndDxInterop
;
4410 extern FN_DrvEndDxInterop DrvEndDxInterop
;
4413 (APIENTRY FN_DrvLockDisplayArea
)(
4415 _In_opt_ RECTL
*prcl
);
4416 typedef FN_DrvLockDisplayArea
*PFN_DrvLockDisplayArea
;
4417 extern FN_DrvLockDisplayArea DrvLockDisplayArea
;
4420 (APIENTRY FN_DrvUnlockDisplayArea
)(
4422 _In_opt_ RECTL
*prcl
);
4423 typedef FN_DrvUnlockDisplayArea
*PFN_DrvUnlockDisplayArea
;
4424 extern FN_DrvUnlockDisplayArea DrvUnlockDisplayArea
;
4426 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */
4432 #endif /* defined __VIDEO_H__ */
4434 #endif /* _WINDDI_ */