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 <winapifamily.h> 33 #include <ddrawint.h> 34 #include <d3dnthal.h> 35 #include <specstrings.h> 36 37 #ifdef __cplusplus 38 extern "C" { 39 #endif 40 41 #ifndef DECLSPEC_IMPORT 42 #define DECLSPEC_IMPORT __attribute__((dllimport)) 43 #endif 44 45 #if defined(_ENGINE_EXPORT_) 46 #define ENGAPI 47 #else 48 #define ENGAPI DECLSPEC_IMPORT 49 #endif 50 51 #ifndef _NO_DDRAWINT_NO_COM 52 53 #if !defined(EXTERN_C) 54 #ifdef __cplusplus 55 #define EXTERN_C extern "C" 56 #define __EXTERN_C extern "C" 57 #else 58 #define EXTERN_C extern 59 #define __EXTERN_C 60 #endif 61 #endif /* !defined(EXTERN_C) */ 62 63 #if !defined(DEFINE_GUID) 64 #ifdef INITGUID 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 } } 67 #else /* !INITGUID */ 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) */ 72 73 #if !defined(DEFINE_GUIDEX) 74 #define DEFINE_GUIDEX(name) EXTERN_C const CDECL GUID name 75 #endif /* !defined(DEFINE_GUIDEX) */ 76 77 #if !defined(STATICGUIDOF) 78 #define STATICGUIDOF(guid) STATIC_##guid 79 #endif /* !defined(STATICGUIDOF) */ 80 81 #if !defined(GUID_DEFINED) 82 #define GUID_DEFINED 83 typedef struct _GUID 84 { 85 ULONG Data1; 86 USHORT Data2; 87 USHORT Data3; 88 UCHAR Data4[8]; 89 } GUID; 90 #endif /* !defined(GUID_DEFINED) */ 91 92 #if !defined(IsEqualGUID) 93 #define IsEqualGUID(guid1, guid2) \ 94 (!memcmp((guid1), (guid2), sizeof(GUID))) 95 #endif /* !defined(IsEqualGUID) */ 96 97 #ifndef IsEqualIID 98 #define IsEqualIID IsEqualGUID 99 #endif /* !defined(IsEqualIID) */ 100 101 #endif /* !_NO_DDRAWINT_NO_COM */ 102 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 108 109 #define GDI_DRIVER_VERSION 0x4000 110 111 #if defined(_X86_) && !defined(USERMODE_DRIVER) && !defined(BUILD_WOW6432) 112 typedef DWORD FLOATL; 113 #else 114 typedef FLOAT FLOATL; 115 #endif 116 117 typedef SHORT FWORD; 118 typedef LONG LDECI4; 119 typedef ULONG IDENT; 120 121 typedef ULONG_PTR HFF; 122 typedef ULONG_PTR HFC; 123 124 typedef LONG PTRDIFF; 125 typedef PTRDIFF *PPTRDIFF; 126 typedef LONG FIX; 127 typedef FIX *PFIX; 128 typedef ULONG ROP4; 129 typedef ULONG MIX; 130 typedef ULONG HGLYPH; 131 typedef HGLYPH *PHGLYPH; 132 133 typedef LONG_PTR (APIENTRY *PFN)(); 134 135 DECLARE_HANDLE(HBM); 136 DECLARE_HANDLE(HDEV); 137 DECLARE_HANDLE(HSURF); 138 DECLARE_HANDLE(DHSURF); 139 DECLARE_HANDLE(DHPDEV); 140 DECLARE_HANDLE(HDRVOBJ); 141 DECLARE_HANDLE(HSEMAPHORE); 142 143 typedef _Return_type_success_(return >= 0) long NTSTATUS; 144 145 #ifndef _NTDDVDEO_ 146 typedef struct _ENG_EVENT *PEVENT; 147 #endif 148 149 #define OPENGL_CMD 4352 150 #define OPENGL_GETINFO 4353 151 #define WNDOBJ_SETUP 4354 152 153 #define FD_ERROR 0xFFFFFFFF 154 #define DDI_ERROR 0xFFFFFFFF 155 156 #define HFF_INVALID ((HFF) 0) 157 #define HFC_INVALID ((HFC) 0) 158 #define HGLYPH_INVALID ((HGLYPH) -1) 159 160 #define FP_ALTERNATEMODE 1 161 #define FP_WINDINGMODE 2 162 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) */ 173 174 #define SGI_EXTRASPACE 0 175 176 #define DCR_SOLID 0 177 #define DCR_DRIVER 1 178 #define DCR_HALFTONE 2 179 180 #define GX_IDENTITY 0 181 #define GX_OFFSET 1 182 #define GX_SCALE 2 183 #define GX_GENERAL 3 184 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) 190 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)) 194 195 typedef struct _POINTE { 196 FLOATL x; 197 FLOATL y; 198 } POINTE, *PPOINTE; 199 200 typedef union _FLOAT_LONG { 201 FLOATL e; 202 LONG l; 203 } FLOAT_LONG, *PFLOAT_LONG; 204 205 typedef struct _POINTFIX { 206 FIX x; 207 FIX y; 208 } POINTFIX, *PPOINTFIX; 209 210 typedef struct _RECTFX { 211 FIX xLeft; 212 FIX yTop; 213 FIX xRight; 214 FIX yBottom; 215 } RECTFX, *PRECTFX; 216 217 typedef struct _POINTQF { 218 LARGE_INTEGER x; 219 LARGE_INTEGER y; 220 } POINTQF, *PPOINTQF; 221 222 223 typedef struct _BLENDOBJ { 224 BLENDFUNCTION BlendFunction; 225 } BLENDOBJ,*PBLENDOBJ; 226 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 232 233 typedef struct _BRUSHOBJ { 234 ULONG iSolidColor; 235 PVOID pvRbrush; 236 FLONG flColorType; 237 } BRUSHOBJ; 238 239 typedef struct _CIECHROMA { 240 LDECI4 x; 241 LDECI4 y; 242 LDECI4 Y; 243 } CIECHROMA; 244 245 typedef struct _RUN { 246 LONG iStart; 247 LONG iStop; 248 } RUN, *PRUN; 249 250 typedef struct _CLIPLINE { 251 POINTFIX ptfxA; 252 POINTFIX ptfxB; 253 LONG lStyleState; 254 ULONG c; 255 _Field_size_(c) RUN arun[1]; 256 } CLIPLINE, *PCLIPLINE; 257 258 /* CLIPOBJ.iDComplexity constants */ 259 #define DC_TRIVIAL 0 260 #define DC_RECT 1 261 #define DC_COMPLEX 3 262 263 /* CLIPOBJ.iFComplexity constants */ 264 #define FC_RECT 1 265 #define FC_RECT4 2 266 #define FC_COMPLEX 3 267 268 /* CLIPOBJ.iMode constants */ 269 #define TC_RECTANGLES 0 270 #define TC_PATHOBJ 2 271 272 /* CLIPOBJ.fjOptions constants */ 273 #define OC_BANK_CLIP 1 274 275 typedef struct _CLIPOBJ { 276 ULONG iUniq; 277 RECTL rclBounds; 278 BYTE iDComplexity; 279 BYTE iFComplexity; 280 BYTE iMode; 281 BYTE fjOptions; 282 } CLIPOBJ; 283 284 typedef struct _COLORINFO { 285 CIECHROMA Red; 286 CIECHROMA Green; 287 CIECHROMA Blue; 288 CIECHROMA Cyan; 289 CIECHROMA Magenta; 290 CIECHROMA Yellow; 291 CIECHROMA AlignmentWhite; 292 LDECI4 RedGamma; 293 LDECI4 GreenGamma; 294 LDECI4 BlueGamma; 295 LDECI4 MagentaInCyanDye; 296 LDECI4 YellowInCyanDye; 297 LDECI4 CyanInMagentaDye; 298 LDECI4 YellowInMagentaDye; 299 LDECI4 CyanInYellowDye; 300 LDECI4 MagentaInYellowDye; 301 } COLORINFO, *PCOLORINFO; 302 303 /* DEVHTADJDATA.DeviceFlags constants */ 304 #define DEVHTADJF_COLOR_DEVICE 0x00000001 305 #define DEVHTADJF_ADDITIVE_DEVICE 0x00000002 306 307 typedef struct _DEVHTINFO { 308 DWORD HTFlags; 309 DWORD HTPatternSize; 310 DWORD DevPelsDPI; 311 COLORINFO ColorInfo; 312 } DEVHTINFO, *PDEVHTINFO; 313 314 typedef struct _DEVHTADJDATA { 315 DWORD DeviceFlags; 316 DWORD DeviceXDPI; 317 DWORD DeviceYDPI; 318 PDEVHTINFO pDefHTInfo; 319 PDEVHTINFO pAdjHTInfo; 320 } DEVHTADJDATA, *PDEVHTADJDATA; 321 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 353 354 /* DEVINFO.iDitherFormat constants */ 355 #define BMF_1BPP 1L 356 #define BMF_4BPP 2L 357 #define BMF_8BPP 3L 358 #define BMF_16BPP 4L 359 #define BMF_24BPP 5L 360 #define BMF_32BPP 6L 361 #define BMF_4RLE 7L 362 #define BMF_8RLE 8L 363 #define BMF_JPEG 9L 364 #define BMF_PNG 10L 365 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) */ 388 389 typedef struct _DEVINFO { 390 FLONG flGraphicsCaps; 391 LOGFONTW lfDefaultFont; 392 LOGFONTW lfAnsiVarFont; 393 LOGFONTW lfAnsiFixFont; 394 ULONG cFonts; 395 ULONG iDitherFormat; 396 USHORT cxDither; 397 USHORT cyDither; 398 HPALETTE hpalDefault; 399 FLONG flGraphicsCaps2; 400 } DEVINFO, *PDEVINFO; 401 402 struct _DRIVEROBJ; 403 404 typedef BOOL 405 (APIENTRY CALLBACK *FREEOBJPROC)( 406 _In_ struct _DRIVEROBJ *pDriverObj); 407 408 typedef struct _DRIVEROBJ { 409 PVOID pvObj; 410 FREEOBJPROC pFreeProc; 411 HDEV hdev; 412 DHPDEV dhpdev; 413 } DRIVEROBJ; 414 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) */ 528 529 typedef struct _DRVFN { 530 ULONG iFunc; 531 PFN pfn; 532 } DRVFN, *PDRVFN; 533 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 540 541 typedef struct tagDRVENABLEDATA { 542 ULONG iDriverVersion; 543 ULONG c; 544 DRVFN *pdrvfn; 545 } DRVENABLEDATA, *PDRVENABLEDATA; 546 547 /* Font file status values */ 548 #define FF_SIGNATURE_VERIFIED 0x00000001L 549 #define FF_IGNORED_SIGNATURE 0x00000002L 550 551 /* Obsolete in Windows 2000 and later */ 552 typedef struct { 553 DWORD nSize; 554 HDC hdc; 555 PBYTE pvEMF; 556 PBYTE pvCurrentRecord; 557 } EMFINFO, *PEMFINFO; 558 559 typedef struct _ENGSAFESEMAPHORE { 560 HSEMAPHORE hsem; 561 LONG lCount; 562 } ENGSAFESEMAPHORE; 563 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; 574 575 typedef struct _ENUMRECTS { 576 ULONG c; 577 RECTL arcl[1]; 578 } ENUMRECTS; 579 580 typedef struct _FD_XFORM { 581 FLOATL eXX; 582 FLOATL eXY; 583 FLOATL eYX; 584 FLOATL eYY; 585 } FD_XFORM, *PFD_XFORM; 586 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 593 594 typedef struct _FD_DEVICEMETRICS { 595 FLONG flRealizedType; 596 POINTE pteBase; 597 POINTE pteSide; 598 LONG lD; 599 FIX fxMaxAscender; 600 FIX fxMaxDescender; 601 POINTL ptlUnderline1; 602 POINTL ptlStrikeout; 603 POINTL ptlULThickness; 604 POINTL ptlSOThickness; 605 ULONG cxMax; 606 ULONG cyMax; 607 ULONG cjGlyphMax; 608 FD_XFORM fdxQuantized; 609 LONG lNonLinearExtLeading; 610 LONG lNonLinearIntLeading; 611 LONG lNonLinearMaxCharWidth; 612 LONG lNonLinearAvgCharWidth; 613 LONG lMinA; 614 LONG lMinC; 615 LONG lMinD; 616 LONG alReserved[1]; 617 } FD_DEVICEMETRICS, *PFD_DEVICEMETRICS; 618 619 /* FD_GLYPHATTR.iMode constants */ 620 #define FO_ATTR_MODE_ROTATE 1 621 622 typedef struct _FD_GLYPHATTR { 623 ULONG cjThis; 624 ULONG cGlyphs; 625 ULONG iMode; 626 _Field_size_((cGlyphs+7)/8) BYTE aGlyphAttr[1]; 627 } FD_GLYPHATTR, *PFD_GLYPHATTR; 628 629 /* FD_GLYPHSET.flAccel */ 630 #define GS_UNICODE_HANDLES 0x00000001 631 #define GS_8BIT_HANDLES 0x00000002 632 #define GS_16BIT_HANDLES 0x00000004 633 634 typedef struct _WCRUN { 635 WCHAR wcLow; 636 USHORT cGlyphs; 637 HGLYPH *phg; 638 } WCRUN, *PWCRUN; 639 640 typedef struct _FD_GLYPHSET { 641 ULONG cjThis; 642 FLONG flAccel; 643 ULONG cGlyphsSupported; 644 ULONG cRuns; 645 _Field_size_(cRuns) WCRUN awcrun[1]; 646 } FD_GLYPHSET, *PFD_GLYPHSET; 647 648 typedef struct _FD_KERNINGPAIR { 649 WCHAR wcFirst; 650 WCHAR wcSecond; 651 FWORD fwdKern; 652 } FD_KERNINGPAIR; 653 654 /* Obsolete in Windows 2000 and later */ 655 typedef struct _LIGATURE { 656 ULONG culSize; 657 LPWSTR pwsz; 658 ULONG chglyph; 659 HGLYPH ahglyph[1]; 660 } LIGATURE, *PLIGATURE; 661 662 /* Obsolete in Windows 2000 and later */ 663 typedef struct _FD_LIGATURE { 664 ULONG culThis; 665 ULONG ulType; 666 ULONG cLigatures; 667 LIGATURE alig[1]; 668 } FD_LIGATURE; 669 670 #if defined(_X86_) && !defined(USERMODE_DRIVER) 671 typedef struct _FLOATOBJ 672 { 673 ULONG ul1; 674 ULONG ul2; 675 } FLOATOBJ, *PFLOATOBJ; 676 #else 677 typedef FLOAT FLOATOBJ, *PFLOATOBJ; 678 #endif 679 680 #ifndef USERMODE_DRIVER 681 typedef struct tagFLOATOBJ_XFORM { 682 FLOATOBJ eM11; 683 FLOATOBJ eM12; 684 FLOATOBJ eM21; 685 FLOATOBJ eM22; 686 FLOATOBJ eDx; 687 FLOATOBJ eDy; 688 } FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM; 689 #else 690 typedef XFORML FLOATOBJ_XFORM, *PFLOATOBJ_XFORM, FAR *LPFLOATOBJ_XFORM; 691 #endif 692 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 701 702 typedef struct _FONTDIFF { 703 BYTE jReserved1; 704 BYTE jReserved2; 705 BYTE jReserved3; 706 BYTE bWeight; 707 USHORT usWinWeight; 708 FSHORT fsSelection; 709 FWORD fwdAveCharWidth; 710 FWORD fwdMaxCharInc; 711 POINTL ptlCaret; 712 } FONTDIFF; 713 714 typedef struct _FONTSIM { 715 PTRDIFF dpBold; 716 PTRDIFF dpItalic; 717 PTRDIFF dpBoldItalic; 718 } FONTSIM; 719 720 /* FONTINFO.flCaps constants */ 721 #define FO_DEVICE_FONT 1L 722 #define FO_OUTLINE_CAPABLE 2L 723 724 typedef struct _FONTINFO { 725 ULONG cjThis; 726 FLONG flCaps; 727 ULONG cGlyphsSupported; 728 ULONG cjMaxGlyph1; 729 ULONG cjMaxGlyph4; 730 ULONG cjMaxGlyph8; 731 ULONG cjMaxGlyph32; 732 } FONTINFO, *PFONTINFO; 733 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 739 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 756 757 #define FD_NEGATIVE_FONT 1L /* Obsolete in Windows 2000 and later */ 758 #define FO_DEVICE_FONT 1L 759 #define FO_OUTLINE_CAPABLE 2L 760 761 typedef struct _FONTOBJ { 762 ULONG iUniq; 763 ULONG iFace; 764 ULONG cxMax; 765 FLONG flFontType; 766 ULONG_PTR iTTUniq; 767 ULONG_PTR iFile; 768 SIZE sizLogResPpi; 769 ULONG ulStyleSize; 770 PVOID pvConsumer; 771 PVOID pvProducer; 772 } FONTOBJ; 773 774 typedef struct _GAMMARAMP { 775 WORD Red[256]; 776 WORD Green[256]; 777 WORD Blue[256]; 778 } GAMMARAMP, *PGAMMARAMP; 779 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 787 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 814 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 823 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 836 837 #define MAKE_CMYMASK_BYTE(c,m,y) ((BYTE)(((BYTE)(c) & 0x07) << 5) \ 838 |(BYTE)(((BYTE)(m) & 0x07) << 2) \ 839 |(BYTE)((BYTE)(y) & 0x03)) 840 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)) 844 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 850 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 861 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) 865 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 873 874 #define PPG_DEFAULT 0 875 #define PPG_SRGB 1 876 877 typedef struct _GDIINFO { 878 ULONG ulVersion; 879 ULONG ulTechnology; 880 ULONG ulHorzSize; 881 ULONG ulVertSize; 882 ULONG ulHorzRes; 883 ULONG ulVertRes; 884 ULONG cBitsPixel; 885 ULONG cPlanes; 886 ULONG ulNumColors; 887 ULONG flRaster; 888 ULONG ulLogPixelsX; 889 ULONG ulLogPixelsY; 890 ULONG flTextCaps; 891 ULONG ulDACRed; 892 ULONG ulDACGreen; 893 ULONG ulDACBlue; 894 ULONG ulAspectX; 895 ULONG ulAspectY; 896 ULONG ulAspectXY; 897 LONG xStyleStep; 898 LONG yStyleStep; 899 LONG denStyleStep; 900 POINTL ptlPhysOffset; 901 SIZEL szlPhysSize; 902 ULONG ulNumPalReg; 903 COLORINFO ciDevice; 904 ULONG ulDevicePelsDPI; 905 ULONG ulPrimaryOrder; 906 ULONG ulHTPatternSize; 907 ULONG ulHTOutputFormat; 908 ULONG flHTFlags; 909 ULONG ulVRefresh; 910 ULONG ulBltAlignment; 911 ULONG ulPanningHorzRes; 912 ULONG ulPanningVertRes; 913 ULONG xPanningAlignment; 914 ULONG yPanningAlignment; 915 ULONG cxHTPat; 916 ULONG cyHTPat; 917 LPBYTE pHTPatA; 918 LPBYTE pHTPatB; 919 LPBYTE pHTPatC; 920 ULONG flShadeBlend; 921 ULONG ulPhysicalPixelCharacteristics; 922 ULONG ulPhysicalPixelGamma; 923 } GDIINFO, *PGDIINFO; 924 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 \ 932 |PD_ENDSUBPATH \ 933 |PD_RESETSTYLE \ 934 |PD_CLOSEFIGURE \ 935 PD_BEZIERS) 936 937 typedef struct _PATHDATA { 938 FLONG flags; 939 ULONG count; 940 POINTFIX *pptfx; 941 } PATHDATA, *PPATHDATA; 942 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) */ 951 952 typedef struct _PATHOBJ { 953 FLONG fl; 954 ULONG cCurves; 955 } PATHOBJ; 956 957 typedef BYTE GAMMA_TABLES[2][256]; 958 959 typedef struct _GLYPHBITS { 960 POINTL ptlOrigin; 961 SIZEL sizlBitmap; 962 BYTE aj[1]; 963 } GLYPHBITS; 964 965 typedef union _GLYPHDEF { 966 GLYPHBITS *pgb; 967 PATHOBJ *ppo; 968 } GLYPHDEF; 969 970 typedef struct _GLYPHPOS { 971 HGLYPH hg; 972 GLYPHDEF *pgdf; 973 POINTL ptl; 974 } GLYPHPOS, *PGLYPHPOS; 975 976 typedef struct _GLYPHDATA { 977 GLYPHDEF gdf; 978 HGLYPH hg; 979 FIX fxD; 980 FIX fxA; 981 FIX fxAB; 982 FIX fxInkTop; 983 FIX fxInkBottom; 984 RECTL rclInk; 985 POINTQF ptqD; 986 } GLYPHDATA; 987 988 typedef struct _IFIEXTRA { 989 ULONG ulIdentifier; 990 PTRDIFF dpFontSig; 991 ULONG cig; 992 PTRDIFF dpDesignVector; 993 PTRDIFF dpAxesInfoW; 994 ULONG aulReserved[1]; 995 } IFIEXTRA, *PIFIEXTRA; 996 997 /* IFIMETRICS constants */ 998 999 #define FM_VERSION_NUMBER 0x0 1000 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 1006 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 1040 1041 #define MAXCHARSETS 16 /* Obsolete in Windows 2000 and later */ 1042 1043 /* IFIMETRICS.ulPanoseCulture constants */ 1044 #define FM_PANOSE_CULTURE_LATIN 0x0 1045 1046 typedef struct _IFIMETRICS { 1047 ULONG cjThis; 1048 ULONG cjIfiExtra; 1049 PTRDIFF dpwszFamilyName; 1050 PTRDIFF dpwszStyleName; 1051 PTRDIFF dpwszFaceName; 1052 PTRDIFF dpwszUniqueName; 1053 PTRDIFF dpFontSim; 1054 LONG lEmbedId; 1055 LONG lItalicAngle; 1056 LONG lCharBias; 1057 PTRDIFF dpCharSets; 1058 BYTE jWinCharSet; 1059 BYTE jWinPitchAndFamily; 1060 USHORT usWinWeight; 1061 ULONG flInfo; 1062 USHORT fsSelection; 1063 USHORT fsType; 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; 1076 FWORD fwdCapHeight; 1077 FWORD fwdXHeight; 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; 1090 BYTE chFirstChar; 1091 BYTE chLastChar; 1092 BYTE chDefaultChar; 1093 BYTE chBreakChar; 1094 WCHAR wcFirstChar; 1095 WCHAR wcLastChar; 1096 WCHAR wcDefaultChar; 1097 WCHAR wcBreakChar; 1098 POINTL ptlBaseline; 1099 POINTL ptlAspect; 1100 POINTL ptlCaret; 1101 RECTL rclFontBox; 1102 BYTE achVendId[4]; 1103 ULONG cKerningPairs; 1104 ULONG ulPanoseCulture; 1105 PANOSE panose; 1106 #if defined(_WIN64) 1107 PVOID Align; 1108 #endif 1109 } IFIMETRICS, *PIFIMETRICS; 1110 1111 /* LINEATTRS.fl */ 1112 #define LA_GEOMETRIC 0x00000001 1113 #define LA_ALTERNATE 0x00000002 1114 #define LA_STARTGAP 0x00000004 1115 #define LA_STYLED 0x00000008 1116 1117 /* LINEATTRS.iJoin */ 1118 #define JOIN_ROUND 0L 1119 #define JOIN_BEVEL 1L 1120 #define JOIN_MITER 2L 1121 1122 /* LINEATTRS.iEndCap */ 1123 #define ENDCAP_ROUND 0L 1124 #define ENDCAP_SQUARE 1L 1125 #define ENDCAP_BUTT 2L 1126 1127 typedef struct _LINEATTRS { 1128 FLONG fl; 1129 ULONG iJoin; 1130 ULONG iEndCap; 1131 FLOAT_LONG elWidth; 1132 FLOATL eMiterLimit; 1133 ULONG cstyle; 1134 PFLOAT_LONG pstyle; 1135 FLOAT_LONG elStyleState; 1136 } LINEATTRS, *PLINEATTRS; 1137 1138 typedef struct _PALOBJ { 1139 ULONG ulReserved; 1140 } PALOBJ; 1141 1142 typedef struct _PERBANDINFO { 1143 BOOL bRepeatThisBand; 1144 SIZEL szlBand; 1145 ULONG ulHorzRes; 1146 ULONG ulVertRes; 1147 } PERBANDINFO, *PPERBANDINFO; 1148 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 1163 1164 typedef struct _STROBJ { 1165 ULONG cGlyphs; 1166 FLONG flAccel; 1167 ULONG ulCharInc; 1168 RECTL rclBkGround; 1169 GLYPHPOS *pgp; 1170 LPWSTR pwszOrg; 1171 } STROBJ; 1172 1173 1174 /* SURFOBJ.iType constants */ 1175 #define STYPE_BITMAP 0L 1176 #define STYPE_DEVICE 1L 1177 #define STYPE_DEVBITMAP 3L 1178 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) */ 1195 1196 #if (NTDDI_VERSION >= NTDDI_WIN8) 1197 #define BMF_RESERVED 0x3E00 1198 #elif (NTDDI_VERSION >= NTDDI_WIN7) 1199 #define BMF_RESERVED 0xFE00 1200 #else 1201 #define BMF_RESERVED 0xFF00 1202 #endif 1203 1204 typedef struct _SURFOBJ { 1205 DHSURF dhsurf; 1206 HSURF hsurf; 1207 DHPDEV dhpdev; 1208 HDEV hdev; 1209 SIZEL sizlBitmap; 1210 ULONG cjBits; 1211 PVOID pvBits; 1212 PVOID pvScan0; 1213 LONG lDelta; 1214 ULONG iUniq; 1215 ULONG iBitmapFormat; 1216 USHORT iType; 1217 USHORT fjBitmap; 1218 } SURFOBJ; 1219 1220 typedef struct _TYPE1_FONT { 1221 HANDLE hPFM; 1222 HANDLE hPFB; 1223 ULONG ulIdentifier; 1224 } TYPE1_FONT; 1225 1226 typedef struct _WNDOBJ { 1227 CLIPOBJ coClient; 1228 PVOID pvConsumer; 1229 RECTL rclClient; 1230 SURFOBJ *psoOwner; 1231 } WNDOBJ, *PWNDOBJ; 1232 1233 typedef struct _XFORML { 1234 FLOATL eM11; 1235 FLOATL eM12; 1236 FLOATL eM21; 1237 FLOATL eM22; 1238 FLOATL eDx; 1239 FLOATL eDy; 1240 } XFORML, *PXFORML; 1241 1242 typedef struct _XFORMOBJ { 1243 ULONG ulReserved; 1244 } XFORMOBJ; 1245 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 1253 1254 typedef struct _XLATEOBJ { 1255 ULONG iUniq; 1256 FLONG flXlate; 1257 USHORT iSrcType; 1258 USHORT iDstType; 1259 ULONG cEntries; 1260 ULONG *pulXlate; 1261 } XLATEOBJ; 1262 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) */ 1276 1277 typedef VOID (APIENTRY CALLBACK *WNDOBJCHANGEPROC)( 1278 _In_ WNDOBJ *pwo, 1279 _In_ FLONG fl); 1280 1281 1282 ENGAPI 1283 HANDLE 1284 APIENTRY 1285 BRUSHOBJ_hGetColorTransform( 1286 _In_ BRUSHOBJ *pbo); 1287 1288 _Ret_opt_bytecount_(cj) 1289 ENGAPI 1290 PVOID 1291 APIENTRY 1292 BRUSHOBJ_pvAllocRbrush( 1293 _In_ BRUSHOBJ *pbo, 1294 _In_ ULONG cj); 1295 1296 ENGAPI 1297 PVOID 1298 APIENTRY 1299 BRUSHOBJ_pvGetRbrush( 1300 _In_ BRUSHOBJ *pbo); 1301 1302 ENGAPI 1303 ULONG 1304 APIENTRY 1305 BRUSHOBJ_ulGetBrushColor( 1306 _In_ BRUSHOBJ *pbo); 1307 1308 ENGAPI 1309 BOOL 1310 APIENTRY 1311 CLIPOBJ_bEnum( 1312 _In_ CLIPOBJ *pco, 1313 _In_ ULONG cj, 1314 _Out_bytecap_(cj) ULONG *pul); 1315 1316 /* CLIPOBJ_cEnumStart.iType constants */ 1317 #define CT_RECTANGLES 0L 1318 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 1327 1328 ENGAPI 1329 ULONG 1330 APIENTRY 1331 CLIPOBJ_cEnumStart( 1332 _Inout_ CLIPOBJ *pco, 1333 _In_ BOOL bAll, 1334 _In_ ULONG iType, 1335 _In_ ULONG iDirection, 1336 _In_ ULONG cLimit); 1337 1338 ENGAPI 1339 PATHOBJ* 1340 APIENTRY 1341 CLIPOBJ_ppoGetPath( 1342 _In_ CLIPOBJ *pco); 1343 1344 #if (NTDDI_VERSION >= NTDDI_VISTA) 1345 ENGAPI 1346 HANDLE 1347 APIENTRY 1348 CLIPOBJ_GetRgn( 1349 _In_ CLIPOBJ* pco); 1350 #endif 1351 1352 ENGAPI 1353 VOID 1354 APIENTRY 1355 EngAcquireSemaphore( 1356 _Inout_ HSEMAPHORE hsem); 1357 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) */ 1363 1364 #ifdef USERMODE_DRIVER 1365 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)) 1369 1370 #else /* !USERMODE_DRIVER */ 1371 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) 1376 ENGAPI 1377 PVOID 1378 APIENTRY 1379 EngAllocMem( 1380 _In_ ULONG fl, 1381 _In_ ULONG cjMemSize, 1382 _In_ ULONG ulTag); 1383 1384 _Must_inspect_result_ 1385 _Ret_opt_bytecount_(cjMemSize) 1386 __drv_allocatesMem(PrivateUserMem) 1387 ENGAPI 1388 PVOID 1389 APIENTRY 1390 EngAllocPrivateUserMem( 1391 _In_ PDD_SURFACE_LOCAL psl, 1392 _In_ SIZE_T cjMemSize, 1393 _In_ ULONG ulTag); 1394 1395 _Must_inspect_result_ 1396 _Ret_opt_bytecount_(cjMemSize) 1397 __drv_allocatesMem(UserMem) 1398 ENGAPI 1399 PVOID 1400 APIENTRY 1401 EngAllocUserMem( 1402 _In_ SIZE_T cjMemSize, 1403 _In_ ULONG ulTag); 1404 1405 #endif /* !USERMODE_DRIVER */ 1406 1407 ENGAPI 1408 BOOL 1409 APIENTRY 1410 EngAlphaBlend( 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); 1418 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 1439 #else 1440 #define HOOK_FLAGS 0x0003b5ff 1441 #endif 1442 1443 ENGAPI 1444 BOOL 1445 APIENTRY 1446 EngAssociateSurface( 1447 _In_ HSURF hsurf, 1448 _In_ HDEV hdev, 1449 _In_ FLONG flHooks); 1450 1451 ENGAPI 1452 BOOL 1453 APIENTRY 1454 EngBitBlt( 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, 1465 _In_ ROP4 rop4); 1466 1467 ENGAPI 1468 BOOL 1469 APIENTRY 1470 EngCheckAbort( 1471 _In_ SURFOBJ *pso); 1472 1473 ENGAPI 1474 VOID 1475 APIENTRY 1476 EngClearEvent( 1477 _In_ PEVENT pEvent); 1478 1479 _Success_(return != 0) 1480 ENGAPI 1481 FD_GLYPHSET* 1482 APIENTRY 1483 EngComputeGlyphSet( 1484 _In_ INT nCodePage, 1485 _In_ INT nFirstChar, 1486 _In_ INT cChars); 1487 1488 /* EngControlSprites.fl constants */ 1489 #define ECS_TEARDOWN 0x00000001 1490 #define ECS_REDRAW 0x00000002 1491 1492 ENGAPI 1493 BOOL 1494 APIENTRY 1495 EngControlSprites( 1496 _Inout_ WNDOBJ *pwo, 1497 _In_ FLONG fl); 1498 1499 ENGAPI 1500 BOOL 1501 APIENTRY 1502 EngCopyBits( 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); 1509 1510 ENGAPI 1511 HBITMAP 1512 APIENTRY 1513 EngCreateBitmap( 1514 _In_ SIZEL sizl, 1515 _In_ LONG lWidth, 1516 _In_ ULONG iFormat, 1517 _In_ FLONG fl, 1518 _In_opt_ PVOID pvBits); 1519 1520 ENGAPI 1521 CLIPOBJ* 1522 APIENTRY 1523 EngCreateClip(VOID); 1524 1525 _Must_inspect_result_ 1526 ENGAPI 1527 HBITMAP 1528 APIENTRY 1529 EngCreateDeviceBitmap( 1530 _In_ DHSURF dhsurf, 1531 _In_ SIZEL sizl, 1532 _In_ ULONG iFormatCompat); 1533 1534 _Must_inspect_result_ 1535 ENGAPI 1536 HSURF 1537 APIENTRY 1538 EngCreateDeviceSurface( 1539 _In_ DHSURF dhsurf, 1540 _In_ SIZEL sizl, 1541 _In_ ULONG iFormatCompat); 1542 1543 _Must_inspect_result_ 1544 ENGAPI 1545 HDRVOBJ 1546 APIENTRY 1547 EngCreateDriverObj( 1548 _In_ PVOID pvObj, 1549 _In_opt_ FREEOBJPROC pFreeObjProc, 1550 _In_ HDEV hdev); 1551 1552 _Must_inspect_result_ 1553 _Success_(return != FALSE) 1554 ENGAPI 1555 BOOL 1556 APIENTRY 1557 EngCreateEvent( 1558 _Outptr_ PEVENT *ppEvent); 1559 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 1566 1567 _Must_inspect_result_ 1568 ENGAPI 1569 HPALETTE 1570 APIENTRY 1571 EngCreatePalette( 1572 _In_ ULONG iMode, 1573 _In_ ULONG cColors, 1574 _In_ ULONG *pulColors, 1575 _In_ FLONG flRed, 1576 _In_ FLONG flGreen, 1577 _In_ FLONG flBlue); 1578 1579 ENGAPI 1580 PATHOBJ* 1581 APIENTRY 1582 EngCreatePath(VOID); 1583 1584 __drv_allocatesMem(Mem) 1585 _Post_writable_byte_size_(sizeof(ERESOURCE)) 1586 ENGAPI 1587 HSEMAPHORE 1588 APIENTRY 1589 EngCreateSemaphore( 1590 VOID); 1591 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) */ 1605 1606 _Must_inspect_result_ 1607 ENGAPI 1608 WNDOBJ* 1609 APIENTRY 1610 EngCreateWnd( 1611 _In_ SURFOBJ *pso, 1612 _In_ HWND hwnd, 1613 _In_ WNDOBJCHANGEPROC pfn, 1614 _In_ FLONG fl, 1615 _In_ INT iPixelFormat); 1616 1617 _Analysis_noreturn_ 1618 ENGAPI 1619 VOID 1620 APIENTRY 1621 EngDebugBreak(VOID); 1622 1623 ENGAPI 1624 VOID 1625 APIENTRY 1626 EngDebugPrint( 1627 _In_z_ PCHAR StandardPrefix, 1628 _In_z_ PCHAR DebugMessage, 1629 _In_ va_list ap); 1630 1631 ENGAPI 1632 VOID 1633 APIENTRY 1634 EngDeleteClip( 1635 _In_ _Post_ptr_invalid_ CLIPOBJ *pco); 1636 1637 ENGAPI 1638 BOOL 1639 APIENTRY 1640 EngDeleteDriverObj( 1641 _In_ _Post_ptr_invalid_ HDRVOBJ hdo, 1642 _In_ BOOL bCallBack, 1643 _In_ BOOL bLocked); 1644 1645 ENGAPI 1646 BOOL 1647 APIENTRY 1648 EngDeleteEvent( 1649 _In_ _Post_ptr_invalid_ PEVENT pEvent); 1650 1651 ENGAPI 1652 BOOL 1653 APIENTRY 1654 EngDeleteFile( 1655 _In_ LPWSTR pwszFileName); 1656 1657 ENGAPI 1658 BOOL 1659 APIENTRY 1660 EngDeletePalette( 1661 _In_ _Post_ptr_invalid_ HPALETTE hpal); 1662 1663 ENGAPI 1664 VOID 1665 APIENTRY 1666 EngDeletePath( 1667 _In_ _Post_ptr_invalid_ PATHOBJ *ppo); 1668 1669 ENGAPI 1670 VOID 1671 APIENTRY 1672 EngDeleteSafeSemaphore( 1673 _Inout_ _Post_invalid_ ENGSAFESEMAPHORE *pssem); 1674 1675 _Requires_lock_not_held_(*hsem) 1676 ENGAPI 1677 VOID 1678 APIENTRY 1679 EngDeleteSemaphore( 1680 _Inout_ __drv_freesMem(Mem) HSEMAPHORE hsem); 1681 1682 ENGAPI 1683 BOOL 1684 APIENTRY 1685 EngDeleteSurface( 1686 _In_ _Post_ptr_invalid_ HSURF hsurf); 1687 1688 ENGAPI 1689 VOID 1690 APIENTRY 1691 EngDeleteWnd( 1692 _In_ _Post_ptr_invalid_ WNDOBJ *pwo); 1693 1694 _Success_(return==0) 1695 ENGAPI 1696 DWORD 1697 APIENTRY 1698 EngDeviceIoControl( 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); 1706 1707 #define DM_DEFAULT 0x00000001 1708 #define DM_MONOCHROME 0x00000002 1709 1710 ENGAPI 1711 ULONG 1712 APIENTRY 1713 EngDitherColor( 1714 _In_ HDEV hdev, 1715 _In_ ULONG iMode, 1716 _In_ ULONG rgb, 1717 _When_(iMode == DM_DEFAULT, _Out_writes_bytes_(16*8)) 1718 _When_(iMode == DM_MONOCHROME, _Out_writes_bytes_(8)) 1719 ULONG *pul); 1720 1721 /* Obsolete in Windows 2000 and later */ 1722 ENGAPI 1723 HRESULT 1724 APIENTRY 1725 EngDxIoctl( 1726 _In_ ULONG ulIoctl, 1727 _Inout_ PVOID pBuffer, 1728 _In_ ULONG ulBufferSize); 1729 1730 #ifdef USERMODE_DRIVER 1731 #define EngEnumForms EnumForms 1732 #else /* !USERMODE_DRIVER */ 1733 ENGAPI 1734 BOOL 1735 APIENTRY 1736 EngEnumForms( 1737 _In_ HANDLE hPrinter, 1738 _In_ DWORD Level, 1739 _Out_writes_bytes_opt_(cbBuf) LPBYTE pForm, 1740 _In_ DWORD cbBuf, 1741 _Out_ LPDWORD pcbNeeded, 1742 _Out_ LPDWORD pcReturned); 1743 #endif /* !USERMODE_DRIVER */ 1744 1745 ENGAPI 1746 BOOL 1747 APIENTRY 1748 EngEraseSurface( 1749 _In_ SURFOBJ *pso, 1750 _In_ RECTL *prcl, 1751 _In_ ULONG iColor); 1752 1753 ENGAPI 1754 BOOL 1755 APIENTRY 1756 EngFillPath( 1757 _Inout_ SURFOBJ *pso, 1758 _In_ PATHOBJ *ppo, 1759 _In_ CLIPOBJ *pco, 1760 _In_ BRUSHOBJ *pbo, 1761 _In_ POINTL *pptlBrushOrg, 1762 _In_ MIX mix, 1763 _In_ FLONG flOptions); 1764 1765 #ifdef USERMODE_DRIVER 1766 #define EngFindImageProcAddress(h, procname) ((PVOID) GetProcAddress(h, procname)) 1767 #else /* !USERMODE_DRIVER */ 1768 ENGAPI 1769 PVOID 1770 APIENTRY 1771 EngFindImageProcAddress( 1772 _In_ HANDLE hModule, 1773 _In_ LPSTR lpProcName); 1774 #endif /* !USERMODE_DRIVER */ 1775 1776 ENGAPI 1777 PVOID 1778 APIENTRY 1779 EngFindResource( 1780 _In_ HANDLE h, 1781 _In_ INT iName, 1782 _In_ INT iType, 1783 _Out_ PULONG pulSize); 1784 1785 _Must_inspect_result_ 1786 _Ret_opt_bytecap_(cjSize) 1787 ENGAPI 1788 PVOID 1789 APIENTRY 1790 EngFntCacheAlloc( 1791 _In_ ULONG ulFastCheckSum, 1792 _In_ ULONG cjSize); 1793 1794 /* EngFntCacheFault.iFaultMode constants */ 1795 #define ENG_FNT_CACHE_READ_FAULT 0x00000001 1796 #define ENG_FNT_CACHE_WRITE_FAULT 0x00000002 1797 1798 ENGAPI 1799 VOID 1800 APIENTRY 1801 EngFntCacheFault( 1802 _In_ ULONG ulFastCheckSum, 1803 _In_ ULONG iFaultMode); 1804 1805 ENGAPI 1806 PVOID 1807 APIENTRY 1808 EngFntCacheLookUp( 1809 _In_ ULONG FastCheckSum, 1810 _Out_ ULONG *pulSize); 1811 1812 #ifdef USERMODE_DRIVER 1813 1814 #define EngFreeMem(p) GlobalFree((HGLOBAL) (p)) 1815 #define EngFreePrivateUserMem( psl, p) GlobalFree((HGLOBAL) (p)) 1816 #define EngFreeUserMem(p) GlobalFree((HGLOBAL) (p)) 1817 1818 #else /* !USERMODE_DRIVER */ 1819 1820 ENGAPI 1821 VOID 1822 APIENTRY 1823 EngFreeMem( 1824 _Pre_notnull_ __drv_freesMem(Mem) PVOID pv); 1825 1826 ENGAPI 1827 VOID 1828 APIENTRY 1829 EngFreePrivateUserMem( 1830 _In_ PDD_SURFACE_LOCAL psl, 1831 _Pre_notnull_ __drv_freesMem(PrivateUserMem) PVOID pv); 1832 1833 ENGAPI 1834 VOID 1835 APIENTRY 1836 EngFreeUserMem( 1837 _Pre_notnull_ __drv_freesMem(UserMem) PVOID pv); 1838 1839 #endif /* !USERMODE_DRIVER */ 1840 1841 ENGAPI 1842 VOID 1843 APIENTRY 1844 EngFreeModule( 1845 _In_ _Post_invalid_ HANDLE h); 1846 1847 1848 ENGAPI 1849 VOID 1850 APIENTRY 1851 EngGetCurrentCodePage( 1852 _Out_ PUSHORT OemCodePage, 1853 _Out_ PUSHORT AnsiCodePage); 1854 1855 ENGAPI 1856 HANDLE 1857 APIENTRY 1858 EngGetCurrentProcessId(VOID); 1859 1860 ENGAPI 1861 HANDLE 1862 APIENTRY 1863 EngGetCurrentThreadId(VOID); 1864 1865 _Must_inspect_result_ _Ret_z_ 1866 ENGAPI 1867 LPWSTR 1868 APIENTRY 1869 EngGetDriverName( 1870 _In_ HDEV hdev); 1871 1872 ENGAPI 1873 BOOL 1874 APIENTRY 1875 EngGetFileChangeTime( 1876 _In_ HANDLE h, 1877 _Out_ LARGE_INTEGER *pChangeTime); 1878 1879 ENGAPI 1880 BOOL 1881 APIENTRY 1882 EngGetFilePath( 1883 _In_ HANDLE h, 1884 _Out_ WCHAR (*pDest)[MAX_PATH+1]); 1885 1886 #ifdef USERMODE_DRIVER 1887 #define EngGetForm GetForm 1888 #define EngGetLastError GetLastError 1889 #define EngGetPrinter GetPrinter 1890 #define EngGetPrinterData GetPrinterData 1891 #else /* !USERMODE_DRIVER */ 1892 ENGAPI 1893 BOOL 1894 APIENTRY 1895 EngGetForm( 1896 _In_ HANDLE hPrinter, 1897 _In_ LPWSTR pFormName, 1898 _In_ DWORD Level, 1899 _In_reads_bytes_opt_(cbBuf) LPBYTE pForm, 1900 _In_ DWORD cbBuf, 1901 _Out_ LPDWORD pcbNeeded); 1902 1903 ENGAPI 1904 ULONG 1905 APIENTRY 1906 EngGetLastError(VOID); 1907 1908 ENGAPI 1909 BOOL 1910 APIENTRY 1911 EngGetPrinter( 1912 _In_ HANDLE hPrinter, 1913 _In_ DWORD dwLevel, 1914 _Out_writes_bytes_opt_(cbBuf) LPBYTE pPrinter, 1915 _In_ DWORD cbBuf, 1916 _Out_ LPDWORD pcbNeeded); 1917 1918 ENGAPI 1919 DWORD 1920 APIENTRY 1921 EngGetPrinterData( 1922 _In_ HANDLE hPrinter, 1923 _In_ LPWSTR pValueName, 1924 _Out_opt_ LPDWORD pType, 1925 _Out_writes_bytes_opt_(cjSize) LPBYTE pData, 1926 _In_ DWORD cjSize, 1927 _Out_ LPDWORD pcjNeeded); 1928 #endif /* !USERMODE_DRIVER */ 1929 1930 ENGAPI 1931 LPWSTR 1932 APIENTRY 1933 EngGetPrinterDataFileName( 1934 _In_ HDEV hdev); 1935 1936 #ifdef USERMODE_DRIVER 1937 #define EngGetPrinterDriver GetPrinterDriver 1938 #else /* !USERMODE_DRIVER */ 1939 ENGAPI 1940 BOOL 1941 APIENTRY 1942 EngGetPrinterDriver( 1943 _In_ HANDLE hPrinter, 1944 _In_opt_ LPWSTR pEnvironment, 1945 _In_ DWORD dwLevel, 1946 _Out_writes_bytes_opt_(cjBufSize) BYTE *lpbDrvInfo, 1947 _In_ DWORD cjBufSize, 1948 _Out_ DWORD *pcjNeeded); 1949 #endif /* !USERMODE_DRIVER */ 1950 1951 ENGAPI 1952 HANDLE 1953 APIENTRY 1954 EngGetProcessHandle(VOID); 1955 1956 ENGAPI 1957 BOOL 1958 APIENTRY 1959 EngGetType1FontList( 1960 _In_ HDEV hdev, 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); 1966 1967 ENGAPI 1968 BOOL 1969 APIENTRY 1970 EngGradientFill( 1971 _Inout_ SURFOBJ *psoDest, 1972 _In_ CLIPOBJ *pco, 1973 _In_opt_ XLATEOBJ *pxlo, 1974 _In_ TRIVERTEX *pVertex, 1975 _In_ ULONG nVertex, 1976 _In_ PVOID pMesh, 1977 _In_ ULONG nMesh, 1978 _In_ RECTL *prclExtents, 1979 _In_ POINTL *pptlDitherOrg, 1980 _In_ ULONG ulMode); 1981 1982 /* EngHangNotification return values */ 1983 #define EHN_RESTORED 0x00000000 1984 #define EHN_ERROR 0x00000001 1985 1986 ENGAPI 1987 ULONG 1988 APIENTRY 1989 EngHangNotification( 1990 _In_ HDEV hDev, 1991 _Reserved_ PVOID Reserved); 1992 1993 ENGAPI 1994 BOOL 1995 APIENTRY 1996 EngInitializeSafeSemaphore( 1997 _Out_ ENGSAFESEMAPHORE *pssem); 1998 1999 ENGAPI 2000 BOOL 2001 APIENTRY 2002 EngIsSemaphoreOwned( 2003 _In_ HSEMAPHORE hsem); 2004 2005 ENGAPI 2006 BOOL 2007 APIENTRY 2008 EngIsSemaphoreOwnedByCurrentThread( 2009 _In_ HSEMAPHORE hsem); 2010 2011 ENGAPI 2012 BOOL 2013 APIENTRY 2014 EngLineTo( 2015 _Inout_ SURFOBJ *pso, 2016 _In_ CLIPOBJ *pco, 2017 _In_ BRUSHOBJ *pbo, 2018 _In_ LONG x1, 2019 _In_ LONG y1, 2020 _In_ LONG x2, 2021 _In_ LONG y2, 2022 _In_opt_ RECTL *prclBounds, 2023 _In_ MIX mix); 2024 2025 #ifdef USERMODE_DRIVER 2026 #define EngLoadImage(pwszDriver) ((HANDLE)LoadLibraryW(pwszDriver)) 2027 #else /* !USERMODE_DRIVER */ 2028 ENGAPI 2029 HANDLE 2030 APIENTRY 2031 EngLoadImage( 2032 _In_ LPWSTR pwszDriver); 2033 #endif /* !USERMODE_DRIVER */ 2034 2035 ENGAPI 2036 HANDLE 2037 APIENTRY 2038 EngLoadModule( 2039 _In_ LPWSTR pwsz); 2040 2041 ENGAPI 2042 HANDLE 2043 APIENTRY 2044 EngLoadModuleForWrite( 2045 _In_ LPWSTR pwsz, 2046 _In_ ULONG cjSizeOfModule); 2047 2048 ENGAPI 2049 PDD_SURFACE_LOCAL 2050 APIENTRY 2051 EngLockDirectDrawSurface( 2052 _In_ HANDLE hSurface); 2053 2054 ENGAPI 2055 DRIVEROBJ* 2056 APIENTRY 2057 EngLockDriverObj( 2058 _In_ HDRVOBJ hdo); 2059 2060 ENGAPI 2061 SURFOBJ* 2062 APIENTRY 2063 EngLockSurface( 2064 _In_ HSURF hsurf); 2065 2066 ENGAPI 2067 BOOL 2068 APIENTRY 2069 EngLpkInstalled(VOID); 2070 2071 ENGAPI 2072 PEVENT 2073 APIENTRY 2074 EngMapEvent( 2075 _In_ HDEV hDev, 2076 _In_ HANDLE hUserObject, 2077 _Reserved_ PVOID Reserved1, 2078 _Reserved_ PVOID Reserved2, 2079 _Reserved_ PVOID Reserved3); 2080 2081 _Success_(return != 0) 2082 _When_(cjSize != 0, _At_(return, _Out_writes_bytes_(cjSize))) 2083 ENGAPI 2084 PVOID 2085 APIENTRY 2086 EngMapFile( 2087 _In_ LPWSTR pwsz, 2088 _In_ ULONG cjSize, 2089 _Out_ ULONG_PTR *piFile); 2090 2091 __drv_preferredFunction("EngMapFontFileFD", "Obsolete") 2092 _Check_return_ 2093 _Success_(return!=FALSE) 2094 ENGAPI 2095 BOOL 2096 APIENTRY 2097 EngMapFontFile( 2098 _In_ ULONG_PTR iFile, 2099 _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf, 2100 _Out_ ULONG *pcjBuf); 2101 2102 _Check_return_ 2103 _Success_(return!=FALSE) 2104 ENGAPI 2105 BOOL 2106 APIENTRY 2107 EngMapFontFileFD( 2108 _In_ ULONG_PTR iFile, 2109 _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf, 2110 _Out_ ULONG *pcjBuf); 2111 2112 _Check_return_ 2113 _Success_(return!=NULL) 2114 _Post_writable_byte_size_(*pulSize) 2115 ENGAPI 2116 PVOID 2117 APIENTRY 2118 EngMapModule( 2119 _In_ HANDLE h, 2120 _Out_ PULONG pulSize); 2121 2122 ENGAPI 2123 BOOL 2124 APIENTRY 2125 EngMarkBandingSurface( 2126 _In_ HSURF hsurf); 2127 2128 /* EngModifySurface.flSurface constants */ 2129 #define MS_NOTSYSTEMMEMORY 0x00000001 2130 #define MS_SHAREDACCESS 0x00000002 2131 #define MS_CDDDEVICEBITMAP 0x00000004 2132 2133 ENGAPI 2134 BOOL 2135 APIENTRY 2136 EngModifySurface( 2137 _In_ HSURF hsurf, 2138 _In_ HDEV hdev, 2139 _In_ FLONG flHooks, 2140 _In_ FLONG flSurface, 2141 _In_ DHSURF dhsurf, 2142 _In_ PVOID pvScan0, 2143 _In_ LONG lDelta, 2144 _Reserved_ PVOID pvReserved); 2145 2146 ENGAPI 2147 VOID 2148 APIENTRY 2149 EngMovePointer( 2150 _In_ SURFOBJ *pso, 2151 _In_ LONG x, 2152 _In_ LONG y, 2153 _In_ RECTL *prcl); 2154 2155 #ifdef USERMODE_DRIVER 2156 #define EngMulDiv MulDiv 2157 #else /* !USERMODE_DRIVER */ 2158 ENGAPI 2159 INT 2160 APIENTRY 2161 EngMulDiv( 2162 _In_ INT a, 2163 _In_ INT b, 2164 _In_ INT c); 2165 #endif /* !USERMODE_DRIVER */ 2166 2167 ENGAPI 2168 VOID 2169 APIENTRY 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); 2176 2177 ENGAPI 2178 INT 2179 APIENTRY 2180 EngMultiByteToWideChar( 2181 _In_ UINT CodePage, 2182 _Out_writes_bytes_opt_(cjWideCharString) LPWSTR WideCharString, 2183 _In_ INT cjWideCharString, 2184 _In_reads_bytes_opt_(cjMultiByteString) LPSTR MultiByteString, 2185 _In_ INT cjMultiByteString); 2186 2187 ENGAPI 2188 BOOL 2189 APIENTRY 2190 EngPaint( 2191 _In_ SURFOBJ *pso, 2192 _In_ CLIPOBJ *pco, 2193 _In_ BRUSHOBJ *pbo, 2194 _In_ POINTL *pptlBrushOrg, 2195 _In_ __in_data_source(USER_MODE) MIX mix); 2196 2197 ENGAPI 2198 BOOL 2199 APIENTRY 2200 EngPlgBlt( 2201 _In_ SURFOBJ *psoTrg, 2202 _In_ SURFOBJ *psoSrc, 2203 _In_opt_ SURFOBJ *psoMsk, 2204 _In_ CLIPOBJ *pco, 2205 _In_opt_ XLATEOBJ *pxlo, 2206 _In_ COLORADJUSTMENT *pca, 2207 _In_ POINTL *pptlBrushOrg, 2208 _In_ POINTFIX *pptfx, 2209 _In_ RECTL *prcl, 2210 _When_(psoMsk, _In_) POINTL *pptl, 2211 _In_ __in_data_source(USER_MODE) ULONG iMode); 2212 2213 ENGAPI 2214 VOID 2215 APIENTRY 2216 EngProbeForRead( 2217 _In_reads_bytes_(Length) PVOID Address, 2218 _In_ SIZE_T Length, 2219 _In_ ULONG Alignment); 2220 2221 ENGAPI 2222 VOID 2223 APIENTRY 2224 EngProbeForReadAndWrite( 2225 _Inout_updates_bytes_(Length) PVOID Address, 2226 _In_ SIZE_T Length, 2227 _In_ ULONG Alignment); 2228 2229 typedef enum _ENG_DEVICE_ATTRIBUTE { 2230 QDA_RESERVED = 0, 2231 QDA_ACCELERATION_LEVEL 2232 } ENG_DEVICE_ATTRIBUTE; 2233 2234 ENGAPI 2235 BOOL 2236 APIENTRY 2237 EngQueryDeviceAttribute( 2238 _In_ HDEV hdev, 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); 2244 2245 /* Obsolete in Windows 2000 and later */ 2246 DECLSPEC_DEPRECATED_DDK 2247 BOOL APIENTRY 2248 EngQueryEMFInfo( 2249 _In_ HDEV hdev, 2250 _Out_ EMFINFO *pEMFInfo); 2251 2252 ENGAPI 2253 LARGE_INTEGER 2254 APIENTRY 2255 EngQueryFileTimeStamp( 2256 _In_ LPWSTR pwsz); 2257 2258 ENGAPI 2259 VOID 2260 APIENTRY 2261 EngQueryLocalTime( 2262 _Out_ PENG_TIME_FIELDS ptf); 2263 2264 ENGAPI 2265 ULONG 2266 APIENTRY 2267 EngQueryPalette( 2268 _In_ HPALETTE hPal, 2269 _Out_ ULONG *piMode, 2270 _In_ ULONG cColors, 2271 _Out_writes_opt_(cColors) ULONG *pulColors); 2272 2273 ENGAPI 2274 VOID 2275 APIENTRY 2276 EngQueryPerformanceCounter( 2277 _Out_ LONGLONG *pPerformanceCount); 2278 2279 ENGAPI 2280 VOID 2281 APIENTRY 2282 EngQueryPerformanceFrequency( 2283 _Out_ LONGLONG *pFrequency); 2284 2285 typedef enum _ENG_SYSTEM_ATTRIBUTE { 2286 EngProcessorFeature = 1, 2287 EngNumberOfProcessors, 2288 EngOptimumAvailableUserMemory, 2289 EngOptimumAvailableSystemMemory, 2290 } ENG_SYSTEM_ATTRIBUTE; 2291 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) */ 2300 2301 _Check_return_ 2302 _Success_(return) 2303 ENGAPI 2304 BOOL 2305 APIENTRY 2306 EngQuerySystemAttribute( 2307 _In_ ENG_SYSTEM_ATTRIBUTE CapNum, 2308 _Out_ PDWORD pCapability); 2309 2310 ENGAPI 2311 LONG 2312 APIENTRY 2313 EngReadStateEvent( 2314 _In_ PEVENT pEvent); 2315 2316 _Requires_lock_held_(*hsem) 2317 _Releases_lock_(*hsem) 2318 _Releases_lock_(_Global_critical_region_) 2319 ENGAPI 2320 VOID 2321 APIENTRY 2322 EngReleaseSemaphore( 2323 _Inout_ HSEMAPHORE hsem); 2324 2325 #if defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA) 2326 2327 _Check_return_ 2328 _Success_(return) 2329 _Kernel_float_restored_ 2330 _At_(*pBuffer, _Kernel_requires_resource_held_(EngFloatState) 2331 _Kernel_releases_resource_(EngFloatState)) 2332 ENGAPI 2333 BOOL 2334 APIENTRY 2335 EngRestoreFloatingPointState( 2336 _In_reads_(_Inexpressible_(statesize)) 2337 PVOID pBuffer) 2338 { 2339 UNREFERENCED_PARAMETER(pBuffer); 2340 return TRUE; 2341 } 2342 2343 _Check_return_ 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)) 2349 ENGAPI 2350 ULONG 2351 APIENTRY 2352 EngSaveFloatingPointState( 2353 _At_(*pBuffer, _Kernel_requires_resource_not_held_(EngFloatState)) 2354 _Out_writes_bytes_opt_(cjBufferSize) PVOID pBuffer, 2355 _Inout_ ULONG cjBufferSize) 2356 { 2357 return ((((pBuffer) == NULL) || ((cjBufferSize) == 0)) ? 8 : TRUE); 2358 } 2359 2360 #else /* !(defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA)) */ 2361 2362 _Check_return_ 2363 _Success_(return) 2364 _Kernel_float_restored_ 2365 _At_(*pBuffer, _Kernel_requires_resource_held_(EngFloatState) 2366 _Kernel_releases_resource_(EngFloatState)) 2367 ENGAPI 2368 BOOL 2369 APIENTRY 2370 EngRestoreFloatingPointState( 2371 _In_reads_(_Inexpressible_(statesize)) PVOID pBuffer); 2372 2373 _Check_return_ 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)) 2379 ENGAPI 2380 ULONG 2381 APIENTRY 2382 EngSaveFloatingPointState( 2383 _At_(*pBuffer, _Kernel_requires_resource_not_held_(EngFloatState)) 2384 _Out_writes_bytes_opt_(cjBufferSize) PVOID pBuffer, 2385 _Inout_ ULONG cjBufferSize); 2386 2387 2388 #endif /* defined(_M_AMD64) && (NTDDI_VERSION >= NTDDI_VISTA) */ 2389 2390 ENGAPI 2391 HANDLE 2392 APIENTRY 2393 EngSecureMem( 2394 _In_reads_bytes_(cjLength) PVOID Address, 2395 _In_ ULONG cjLength); 2396 2397 ENGAPI 2398 LONG 2399 APIENTRY 2400 EngSetEvent( 2401 _In_ PEVENT pEvent); 2402 2403 #ifdef USERMODE_DRIVER 2404 #define EngSetLastError SetLastError 2405 #else /* !USERMODE_DRIVER */ 2406 ENGAPI 2407 VOID 2408 APIENTRY 2409 EngSetLastError( 2410 _In_ ULONG iError); 2411 #endif /* !USERMODE_DRIVER */ 2412 2413 ENGAPI 2414 ULONG 2415 APIENTRY 2416 EngSetPointerShape( 2417 _In_ SURFOBJ *pso, 2418 _In_opt_ SURFOBJ *psoMask, 2419 _In_opt_ SURFOBJ *psoColor, 2420 _In_opt_ XLATEOBJ *pxlo, 2421 _In_ LONG xHot, 2422 _In_ LONG yHot, 2423 _In_ LONG x, 2424 _In_ LONG y, 2425 _In_ RECTL *prcl, 2426 _In_ FLONG fl); 2427 2428 __drv_preferredFunction("(see documentation)", "Obsolete, always returns false. ") 2429 ENGAPI 2430 BOOL 2431 APIENTRY 2432 EngSetPointerTag( 2433 _In_ HDEV hdev, 2434 _In_opt_ SURFOBJ *psoMask, 2435 _In_opt_ SURFOBJ *psoColor, 2436 _Reserved_ XLATEOBJ *pxlo, 2437 _In_ FLONG fl); 2438 2439 #ifdef USERMODE_DRIVER 2440 #define EngSetPrinterData SetPrinterData 2441 #else /* !USERMODE_DRIVER */ 2442 ENGAPI 2443 DWORD 2444 APIENTRY 2445 EngSetPrinterData( 2446 _In_ HANDLE hPrinter, 2447 _In_ LPWSTR pType, 2448 _In_ DWORD dwType, 2449 _In_reads_bytes_(cjPrinterData) LPBYTE lpbPrinterData, 2450 _In_ DWORD cjPrinterData); 2451 #endif /* !USERMODE_DRIVER */ 2452 2453 typedef int (__cdecl /*CDECL*/ *SORTCOMP)(const void *pv1, const void *pv2); 2454 2455 ENGAPI 2456 VOID 2457 APIENTRY 2458 EngSort( 2459 _Inout_updates_bytes_(c * cjElem) PBYTE pjBuf, 2460 _In_ ULONG c, 2461 _In_ ULONG cjElem, 2462 _In_ SORTCOMP pfnComp); 2463 2464 ENGAPI 2465 BOOL 2466 APIENTRY 2467 EngStretchBlt( 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, 2478 _In_ ULONG iMode); 2479 2480 ENGAPI 2481 BOOL 2482 APIENTRY 2483 EngStretchBltROP( 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, 2494 _In_ ULONG iMode, 2495 _In_opt_ BRUSHOBJ *pbo, 2496 _In_ DWORD rop4); 2497 2498 ENGAPI 2499 BOOL 2500 APIENTRY 2501 EngStrokeAndFillPath( 2502 _Inout_ SURFOBJ *pso, 2503 _In_ PATHOBJ *ppo, 2504 _In_ CLIPOBJ *pco, 2505 _In_ XFORMOBJ *pxo, 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); 2512 2513 ENGAPI 2514 BOOL 2515 APIENTRY 2516 EngStrokePath( 2517 _In_ SURFOBJ *pso, 2518 _In_ PATHOBJ *ppo, 2519 _In_ CLIPOBJ *pco, 2520 _In_ XFORMOBJ *pxo, 2521 _In_ BRUSHOBJ *pbo, 2522 _In_ POINTL *pptlBrushOrg, 2523 _In_ LINEATTRS *plineattrs, 2524 _In_ MIX mix); 2525 2526 ENGAPI 2527 BOOL 2528 APIENTRY 2529 EngTextOut( 2530 _In_ SURFOBJ *pso, 2531 _In_ STROBJ *pstro, 2532 _In_ FONTOBJ *pfo, 2533 _In_ CLIPOBJ *pco, 2534 _Null_ RECTL *prclExtra, 2535 _In_opt_ RECTL *prclOpaque, 2536 _In_ BRUSHOBJ *pboFore, 2537 _In_ BRUSHOBJ *pboOpaque, 2538 _In_ POINTL *pptlOrg, 2539 _In_ MIX mix); 2540 2541 ENGAPI 2542 BOOL 2543 APIENTRY 2544 EngTransparentBlt( 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); 2553 2554 ENGAPI 2555 VOID 2556 APIENTRY 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); 2563 2564 #ifdef USERMODE_DRIVER 2565 #define EngUnloadImage(h) FreeLibrary((HMODULE) (h)) 2566 #else /* !USERMODE_DRIVER */ 2567 ENGAPI 2568 VOID 2569 APIENTRY 2570 EngUnloadImage( 2571 _In_ HANDLE hModule); 2572 #endif /* !USERMODE_DRIVER */ 2573 2574 ENGAPI 2575 BOOL 2576 APIENTRY 2577 EngUnlockDirectDrawSurface( 2578 _In_ PDD_SURFACE_LOCAL pSurface); 2579 2580 ENGAPI 2581 BOOL 2582 APIENTRY 2583 EngUnlockDriverObj( 2584 _In_ _Post_ptr_invalid_ HDRVOBJ hdo); 2585 2586 ENGAPI 2587 VOID 2588 APIENTRY 2589 EngUnlockSurface( 2590 _In_ _Post_ptr_invalid_ SURFOBJ *pso); 2591 2592 ENGAPI 2593 BOOL 2594 APIENTRY 2595 EngUnmapEvent( 2596 _In_ PEVENT pEvent); 2597 2598 ENGAPI 2599 BOOL 2600 APIENTRY 2601 EngUnmapFile( 2602 _In_ ULONG_PTR iFile); 2603 2604 __drv_preferredFunction("EngUnmapFontFileFD", "Obsolete") 2605 ENGAPI 2606 VOID 2607 APIENTRY 2608 EngUnmapFontFile( 2609 _In_ ULONG_PTR iFile); 2610 2611 ENGAPI 2612 VOID 2613 APIENTRY 2614 EngUnmapFontFileFD( 2615 _In_ ULONG_PTR iFile); 2616 2617 ENGAPI 2618 VOID 2619 APIENTRY 2620 EngUnsecureMem( 2621 _In_ HANDLE hSecure); 2622 2623 ENGAPI 2624 BOOL 2625 APIENTRY 2626 EngWaitForSingleObject( 2627 _In_ PEVENT pEvent, 2628 _In_opt_ PLARGE_INTEGER pTimeOut); 2629 2630 ENGAPI 2631 INT 2632 APIENTRY 2633 EngWideCharToMultiByte( 2634 _In_ UINT CodePage, 2635 _In_reads_bytes_opt_(cjWideCharString) LPWSTR pwszWideCharString, 2636 _In_ INT cjWideCharString, 2637 _Out_z_bytecap_(cjMultiByteString) LPSTR pszMultiByteString, 2638 _In_ INT cjMultiByteString); 2639 2640 #ifdef USERMODE_DRIVER 2641 #define EngWritePrinter WritePrinter 2642 #else /* !USERMODE_DRIVER */ 2643 ENGAPI 2644 BOOL 2645 APIENTRY 2646 EngWritePrinter( 2647 _In_ HANDLE hPrinter, 2648 _In_reads_bytes_(cjBuf) LPVOID pvBuf, 2649 _In_ DWORD cjBuf, 2650 _Out_ LPDWORD pcWritten); 2651 #endif /* !USERMODE_DRIVER */ 2652 2653 #if defined(_X86_) && !defined(USERMODE_DRIVER) 2654 ENGAPI 2655 VOID 2656 APIENTRY 2657 FLOATOBJ_Add( 2658 _Inout_ PFLOATOBJ pf, 2659 _In_ PFLOATOBJ pf1); 2660 2661 ENGAPI 2662 VOID 2663 APIENTRY 2664 FLOATOBJ_AddFloat( 2665 _Inout_ PFLOATOBJ pf, 2666 _In_ FLOATL f); 2667 2668 ENGAPI 2669 VOID 2670 APIENTRY 2671 FLOATOBJ_AddLong( 2672 _Inout_ PFLOATOBJ pf, 2673 _In_ LONG l); 2674 2675 ENGAPI 2676 VOID 2677 APIENTRY 2678 FLOATOBJ_Div( 2679 _Inout_ PFLOATOBJ pf, 2680 _In_ PFLOATOBJ pf1); 2681 2682 ENGAPI 2683 VOID 2684 APIENTRY 2685 FLOATOBJ_DivFloat( 2686 _Inout_ PFLOATOBJ pf, 2687 _In_ FLOATL f); 2688 2689 ENGAPI 2690 VOID 2691 APIENTRY 2692 FLOATOBJ_DivLong( 2693 _Inout_ PFLOATOBJ pf, 2694 _In_ LONG l); 2695 2696 ENGAPI 2697 BOOL 2698 APIENTRY 2699 FLOATOBJ_Equal( 2700 _In_ PFLOATOBJ pf, 2701 _In_ PFLOATOBJ pf1); 2702 2703 ENGAPI 2704 BOOL 2705 APIENTRY 2706 FLOATOBJ_EqualLong( 2707 _In_ PFLOATOBJ pf, 2708 _In_ LONG l); 2709 2710 ENGAPI 2711 LONG 2712 APIENTRY 2713 FLOATOBJ_GetFloat( 2714 _In_ PFLOATOBJ pf); 2715 2716 ENGAPI 2717 LONG 2718 APIENTRY 2719 FLOATOBJ_GetLong( 2720 _In_ PFLOATOBJ pf); 2721 2722 ENGAPI 2723 BOOL 2724 APIENTRY 2725 FLOATOBJ_GreaterThan( 2726 _In_ PFLOATOBJ pf, 2727 _In_ PFLOATOBJ pf1); 2728 2729 ENGAPI 2730 BOOL 2731 APIENTRY 2732 FLOATOBJ_GreaterThanLong( 2733 _In_ PFLOATOBJ pf, 2734 _In_ LONG l); 2735 2736 ENGAPI 2737 BOOL 2738 APIENTRY 2739 FLOATOBJ_LessThan( 2740 _In_ PFLOATOBJ pf, 2741 _In_ PFLOATOBJ pf1); 2742 2743 ENGAPI 2744 BOOL 2745 APIENTRY 2746 FLOATOBJ_LessThanLong( 2747 _In_ PFLOATOBJ pf, 2748 _In_ LONG l); 2749 2750 ENGAPI 2751 VOID 2752 APIENTRY 2753 FLOATOBJ_Mul( 2754 _Inout_ PFLOATOBJ pf, 2755 _In_ PFLOATOBJ pf1); 2756 2757 ENGAPI 2758 VOID 2759 APIENTRY 2760 FLOATOBJ_MulFloat( 2761 _Inout_ PFLOATOBJ pf, 2762 _In_ FLOATL f); 2763 2764 ENGAPI 2765 VOID 2766 APIENTRY 2767 FLOATOBJ_MulLong( 2768 _Inout_ PFLOATOBJ pf, 2769 _In_ LONG l); 2770 2771 ENGAPI 2772 VOID 2773 APIENTRY 2774 FLOATOBJ_Neg( 2775 _Inout_ PFLOATOBJ pf); 2776 2777 ENGAPI 2778 VOID 2779 APIENTRY 2780 FLOATOBJ_SetFloat( 2781 _Out_ PFLOATOBJ pf, 2782 _In_ FLOATL f); 2783 2784 ENGAPI 2785 VOID 2786 APIENTRY 2787 FLOATOBJ_SetLong( 2788 _Out_ PFLOATOBJ pf, 2789 _In_ LONG l); 2790 2791 ENGAPI 2792 VOID 2793 APIENTRY 2794 FLOATOBJ_Sub( 2795 _Inout_ PFLOATOBJ pf, 2796 _In_ PFLOATOBJ pf1); 2797 2798 ENGAPI 2799 VOID 2800 APIENTRY 2801 FLOATOBJ_SubFloat( 2802 _Inout_ PFLOATOBJ pf, 2803 _In_ FLOATL f); 2804 2805 ENGAPI 2806 VOID 2807 APIENTRY 2808 FLOATOBJ_SubLong( 2809 _Inout_ PFLOATOBJ pf, 2810 _In_ LONG l); 2811 2812 #else 2813 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)) 2837 2838 #endif 2839 2840 ENGAPI 2841 ULONG 2842 APIENTRY 2843 FONTOBJ_cGetAllGlyphHandles( 2844 _In_ FONTOBJ *pfo, 2845 _Out_opt_ HGLYPH *phg); 2846 2847 ENGAPI 2848 ULONG 2849 APIENTRY 2850 FONTOBJ_cGetGlyphs( 2851 _In_ FONTOBJ *pfo, 2852 _In_ ULONG iMode, 2853 _In_ ULONG cGlyph, 2854 _In_count_(cGlyph) HGLYPH *phg, 2855 _Out_ PVOID *ppvGlyph); 2856 2857 ENGAPI 2858 FD_GLYPHSET* 2859 APIENTRY 2860 FONTOBJ_pfdg( 2861 _In_ FONTOBJ *pfo); 2862 2863 ENGAPI 2864 IFIMETRICS* 2865 APIENTRY 2866 FONTOBJ_pifi( 2867 _In_ FONTOBJ *pfo); 2868 2869 _Ret_opt_bytecount_(*pcjTable) 2870 ENGAPI 2871 PBYTE 2872 APIENTRY 2873 FONTOBJ_pjOpenTypeTablePointer( 2874 _In_ FONTOBJ *pfo, 2875 _In_ ULONG ulTag, 2876 _Out_ ULONG *pcjTable); 2877 2878 ENGAPI 2879 PFD_GLYPHATTR 2880 APIENTRY 2881 FONTOBJ_pQueryGlyphAttrs( 2882 _In_ FONTOBJ *pfo, 2883 _In_ ULONG iMode); 2884 2885 _Ret_opt_bytecount_(*pcjFile) 2886 ENGAPI 2887 PVOID 2888 APIENTRY 2889 FONTOBJ_pvTrueTypeFontFile( 2890 _In_ FONTOBJ *pfo, 2891 _Out_ ULONG *pcjFile); 2892 2893 ENGAPI 2894 LPWSTR 2895 APIENTRY 2896 FONTOBJ_pwszFontFilePaths( 2897 _In_ FONTOBJ *pfo, 2898 _Out_ ULONG *pcwc); 2899 2900 ENGAPI 2901 XFORMOBJ* 2902 APIENTRY 2903 FONTOBJ_pxoGetXform( 2904 _In_ FONTOBJ *pfo); 2905 2906 ENGAPI 2907 VOID 2908 APIENTRY 2909 FONTOBJ_vGetInfo( 2910 _In_ FONTOBJ *pfo, 2911 _In_ ULONG cjSize, 2912 _Out_bytecap_(cjSize) FONTINFO *pfi); 2913 2914 #if (NTDDI_VERSION <= NTDDI_WINXP) 2915 /* Obsolete in Windows 2000 and later */ 2916 GAMMA_TABLES* 2917 APIENTRY 2918 FONTOBJ_pGetGammaTables( 2919 _In_ FONTOBJ *pfo); 2920 #endif 2921 2922 ENGAPI 2923 LONG 2924 APIENTRY 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); 2932 2933 ENGAPI 2934 LONG 2935 APIENTRY 2936 HT_Get8BPPFormatPalette( 2937 _Out_opt_ LPPALETTEENTRY pPaletteEntry, 2938 _In_ USHORT RedGamma, 2939 _In_ USHORT GreenGamma, 2940 _In_ USHORT BlueGamma); 2941 2942 ENGAPI 2943 LONG 2944 APIENTRY 2945 HT_Get8BPPMaskPalette( 2946 _Out_opt_ LPPALETTEENTRY pPaletteEntry, 2947 _In_ BOOL Use8BPPMaskPal, 2948 _In_ BYTE CMYMask, 2949 _In_ USHORT RedGamma, 2950 _In_ USHORT GreenGamma, 2951 _In_ USHORT BlueGamma); 2952 2953 ENGAPI 2954 LONG 2955 APIENTRY 2956 HTUI_DeviceColorAdjustment( 2957 _In_ LPSTR pDeviceName, 2958 _Out_ PDEVHTADJDATA pDevHTAdjData); 2959 2960 ENGAPI 2961 ULONG 2962 APIENTRY 2963 PALOBJ_cGetColors( 2964 _In_ PALOBJ *ppalo, 2965 _In_ ULONG iStart, 2966 _In_ ULONG cColors, 2967 _Out_writes_(cColors) ULONG *pulColors); 2968 2969 ENGAPI 2970 BOOL 2971 APIENTRY 2972 PATHOBJ_bCloseFigure( 2973 _In_ PATHOBJ *ppo); 2974 2975 ENGAPI 2976 BOOL 2977 APIENTRY 2978 PATHOBJ_bEnum( 2979 _In_ PATHOBJ *ppo, 2980 _Out_ PATHDATA *ppd); 2981 2982 ENGAPI 2983 BOOL 2984 APIENTRY 2985 PATHOBJ_bEnumClipLines( 2986 _In_ PATHOBJ *ppo, 2987 _In_ ULONG cj, 2988 _Out_bytecap_(cj) CLIPLINE *pcl); 2989 2990 ENGAPI 2991 BOOL 2992 APIENTRY 2993 PATHOBJ_bMoveTo( 2994 _In_ PATHOBJ *ppo, 2995 _In_ POINTFIX ptfx); 2996 2997 ENGAPI 2998 BOOL 2999 APIENTRY 3000 PATHOBJ_bPolyBezierTo( 3001 _In_ PATHOBJ *ppo, 3002 _In_count_(cptfx) POINTFIX *pptfx, 3003 _In_ ULONG cptfx); 3004 3005 ENGAPI 3006 BOOL 3007 APIENTRY 3008 PATHOBJ_bPolyLineTo( 3009 _In_ PATHOBJ *ppo, 3010 _In_count_(cptfx) POINTFIX *pptfx, 3011 _In_ ULONG cptfx); 3012 3013 ENGAPI 3014 VOID 3015 APIENTRY 3016 PATHOBJ_vEnumStart( 3017 _Inout_ PATHOBJ *ppo); 3018 3019 ENGAPI 3020 VOID 3021 APIENTRY 3022 PATHOBJ_vEnumStartClipLines( 3023 _Inout_ PATHOBJ *ppo, 3024 _In_ CLIPOBJ *pco, 3025 _In_ SURFOBJ *pso, 3026 _In_ LINEATTRS *pla); 3027 3028 ENGAPI 3029 VOID 3030 APIENTRY 3031 PATHOBJ_vGetBounds( 3032 _In_ PATHOBJ *ppo, 3033 _Out_ PRECTFX prectfx); 3034 3035 ENGAPI 3036 BOOL 3037 APIENTRY 3038 STROBJ_bEnum( 3039 _Inout_ STROBJ *pstro, 3040 _Out_ ULONG *pc, 3041 _Out_ PGLYPHPOS *ppgpos); // FIXME_ size? 3042 3043 ENGAPI 3044 BOOL 3045 APIENTRY 3046 STROBJ_bEnumPositionsOnly( 3047 _In_ STROBJ *pstro, 3048 _Out_ ULONG *pc, 3049 _Out_ PGLYPHPOS *ppgpos); // FIXME_ size? 3050 3051 ENGAPI 3052 BOOL 3053 APIENTRY 3054 STROBJ_bGetAdvanceWidths( 3055 _In_ STROBJ *pso, 3056 _In_ ULONG iFirst, 3057 _In_ ULONG c, 3058 _Out_cap_(c) POINTQF *pptqD); 3059 3060 ENGAPI 3061 DWORD 3062 APIENTRY 3063 STROBJ_dwGetCodePage( 3064 _In_ STROBJ *pstro); 3065 3066 ENGAPI 3067 FIX 3068 APIENTRY 3069 STROBJ_fxBreakExtra( 3070 _In_ STROBJ *pstro); 3071 3072 ENGAPI 3073 FIX 3074 APIENTRY 3075 STROBJ_fxCharacterExtra( 3076 _In_ STROBJ *pstro); 3077 3078 ENGAPI 3079 VOID 3080 APIENTRY 3081 STROBJ_vEnumStart( 3082 _Inout_ STROBJ *pstro); 3083 3084 ENGAPI 3085 BOOL 3086 APIENTRY 3087 WNDOBJ_bEnum( 3088 _Inout_ WNDOBJ *pwo, 3089 _In_ ULONG cj, 3090 _Out_bytecap_(cj) ULONG *pul); 3091 3092 ENGAPI 3093 ULONG 3094 APIENTRY 3095 WNDOBJ_cEnumStart( 3096 _Inout_ WNDOBJ *pwo, 3097 _In_ ULONG iType, 3098 _In_ ULONG iDirection, 3099 _In_ ULONG cLimit); 3100 3101 ENGAPI 3102 VOID 3103 APIENTRY 3104 WNDOBJ_vSetConsumer( 3105 _Inout_ WNDOBJ *pwo, 3106 _In_ PVOID pvConsumer); 3107 3108 /* XFORMOBJ_bApplyXform.iMode constants */ 3109 #define XF_LTOL 0L 3110 #define XF_INV_LTOL 1L 3111 #define XF_LTOFX 2L 3112 #define XF_INV_FXTOL 3L 3113 3114 ENGAPI 3115 BOOL 3116 APIENTRY 3117 XFORMOBJ_bApplyXform( 3118 _In_ XFORMOBJ *pxo, 3119 _In_ ULONG iMode, 3120 _In_ ULONG cPoints, 3121 _In_reads_bytes_(cPoints * sizeof(POINTL)) PVOID pvIn, 3122 _Out_writes_bytes_(cPoints * sizeof(POINTL)) PVOID pvOut); 3123 3124 /* Obsolete in Windows 2000 and later */ 3125 DECLSPEC_DEPRECATED_DDK 3126 ENGAPI 3127 HANDLE 3128 APIENTRY 3129 XFORMOBJ_cmGetTransform( 3130 XFORMOBJ *pxo); 3131 3132 #if !defined(USERMODE_DRIVER) 3133 ENGAPI 3134 ULONG 3135 APIENTRY 3136 XFORMOBJ_iGetFloatObjXform( 3137 _In_ XFORMOBJ *pxo, 3138 _Out_ FLOATOBJ_XFORM *pxfo); 3139 #else 3140 #define XFORMOBJ_iGetFloatObjXform XFORMOBJ_iGetXform 3141 #endif 3142 3143 ENGAPI 3144 ULONG 3145 APIENTRY 3146 XFORMOBJ_iGetXform( 3147 _In_ XFORMOBJ *pxo, 3148 _Out_ XFORML *pxform); 3149 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 3156 3157 ENGAPI 3158 ULONG 3159 APIENTRY 3160 XLATEOBJ_cGetPalette( 3161 _In_ XLATEOBJ *pxlo, 3162 _In_ ULONG iPal, 3163 _In_ ULONG cPal, 3164 _Out_cap_(cPal) ULONG *pPal); 3165 3166 ENGAPI 3167 HANDLE 3168 APIENTRY 3169 XLATEOBJ_hGetColorTransform( 3170 _In_ XLATEOBJ *pxlo); 3171 3172 ENGAPI 3173 ULONG 3174 APIENTRY 3175 XLATEOBJ_iXlate( 3176 _In_ XLATEOBJ *pxlo, 3177 _In_ ULONG iColor); 3178 3179 ENGAPI 3180 ULONG* 3181 APIENTRY 3182 XLATEOBJ_piVector( 3183 _In_ XLATEOBJ *pxlo); 3184 3185 #if (NTDDI_VERSION >= NTDDI_WINXPSP2) 3186 3187 ENGAPI 3188 VOID 3189 APIENTRY 3190 EngBugCheckEx( 3191 _In_ ULONG BugCheckCode, 3192 _In_ ULONG_PTR P1, 3193 _In_ ULONG_PTR P2, 3194 _In_ ULONG_PTR P3, 3195 _In_ ULONG_PTR P4); 3196 3197 #endif /* (NTDDI_VERSION >= NTDDI_WINXPSP2) */ 3198 3199 #if (NTDDI_VERSION >= NTDDI_VISTA) 3200 3201 ENGAPI 3202 HANDLE 3203 APIENTRY 3204 EngCreateRectRgn( 3205 _In_ INT left, 3206 _In_ INT top, 3207 _In_ INT right, 3208 _In_ INT bottom); 3209 3210 ENGAPI 3211 VOID 3212 APIENTRY 3213 EngDeleteRgn( 3214 _In_ HANDLE hrgn); 3215 3216 ENGAPI 3217 INT 3218 APIENTRY 3219 EngCombineRgn( 3220 _In_ HANDLE hrgnTrg, 3221 _In_ HANDLE hrgnSrc1, 3222 _In_ HANDLE hrgnSrc2, 3223 _In_ INT iMode); 3224 3225 ENGAPI 3226 INT 3227 APIENTRY 3228 EngCopyRgn( 3229 _In_ HANDLE hrgnDst, 3230 _In_ HANDLE hrgnSrc); 3231 3232 ENGAPI 3233 INT 3234 APIENTRY 3235 EngIntersectRgn( 3236 _In_ HANDLE hrgnResult, 3237 _In_ HANDLE hRgnA, 3238 _In_ HANDLE hRgnB); 3239 3240 ENGAPI 3241 INT 3242 APIENTRY 3243 EngSubtractRgn( 3244 _In_ HANDLE hrgnResult, 3245 _In_ HANDLE hRgnA, 3246 _In_ HANDLE hRgnB); 3247 3248 ENGAPI 3249 INT 3250 APIENTRY 3251 EngUnionRgn( 3252 _In_ HANDLE hrgnResult, 3253 _In_ HANDLE hRgnA, 3254 _In_ HANDLE hRgnB); 3255 3256 ENGAPI 3257 INT 3258 APIENTRY 3259 EngXorRgn( 3260 _In_ HANDLE hrgnResult, 3261 _In_ HANDLE hRgnA, 3262 _In_ HANDLE hRgnB); 3263 3264 ENGAPI 3265 BOOL 3266 APIENTRY 3267 EngRectInRgn( 3268 _In_ HANDLE hrgn, 3269 _In_ LPRECT prcl); 3270 3271 ENGAPI 3272 BOOL 3273 APIENTRY 3274 EngEqualRgn( 3275 _In_ HANDLE hrgn1, 3276 _In_ HANDLE hrgn2); 3277 3278 ENGAPI 3279 DWORD 3280 APIENTRY 3281 EngGetRgnData( 3282 _In_ HANDLE hrgn, 3283 _In_ DWORD nCount, 3284 _Out_cap_(nCount) LPRGNDATA lpRgnData); 3285 3286 ENGAPI 3287 BOOL 3288 APIENTRY 3289 EngSetRectRgn( 3290 _In_ HANDLE hrgn, 3291 _In_ INT left, 3292 _In_ INT top, 3293 _In_ INT right, 3294 _In_ INT bottom); 3295 3296 ENGAPI 3297 INT 3298 APIENTRY 3299 EngGetRgnBox( 3300 _In_ HANDLE hrgn, 3301 _Out_ LPRECT prcl); 3302 3303 ENGAPI 3304 INT 3305 APIENTRY 3306 EngOffsetRgn( 3307 _In_ HANDLE hrgn, 3308 _In_ INT x, 3309 _In_ INT y); 3310 3311 ENGAPI 3312 VOID 3313 APIENTRY 3314 EngRenderHint( 3315 _In_ DHPDEV dhpdev, 3316 _In_ ULONG NotifyCode, 3317 _In_ SIZE_T Length, 3318 _In_reads_bytes_opt_(Length) PVOID Data); 3319 3320 _Requires_lock_not_held_(*hsem) 3321 _Acquires_exclusive_lock_(*hsem) 3322 _Acquires_lock_(_Global_critical_region_) 3323 ENGAPI 3324 VOID 3325 APIENTRY 3326 EngAcquireSemaphore( 3327 _Inout_ HSEMAPHORE hsem); 3328 3329 ENGAPI 3330 BOOL 3331 APIENTRY 3332 EngAcquireSemaphoreNoWait( 3333 _In_ HSEMAPHORE hsem); 3334 3335 _Acquires_lock_(_Global_critical_region_) 3336 _Requires_lock_not_held_(*hsem) 3337 _Acquires_shared_lock_(*hsem) 3338 ENGAPI 3339 VOID 3340 NTAPI 3341 EngAcquireSemaphoreShared( 3342 _Inout_ HSEMAPHORE hsem); 3343 3344 ENGAPI 3345 BOOL 3346 APIENTRY 3347 EngIsSemaphoreSharedByCurrentThread( 3348 _In_ HSEMAPHORE hsem); 3349 3350 DECLARE_HANDLE(HFASTMUTEX); 3351 3352 ENGAPI 3353 HFASTMUTEX 3354 APIENTRY 3355 EngCreateFastMutex( 3356 VOID); 3357 3358 ENGAPI 3359 VOID 3360 APIENTRY 3361 EngDeleteFastMutex( 3362 _In_ HFASTMUTEX hfm); 3363 3364 ENGAPI 3365 VOID 3366 APIENTRY 3367 EngAcquireFastMutex( 3368 _In_ HFASTMUTEX hfm); 3369 3370 ENGAPI 3371 VOID 3372 APIENTRY 3373 EngReleaseFastMutex( 3374 _In_ HFASTMUTEX hfm); 3375 3376 ENGAPI 3377 BOOL 3378 APIENTRY 3379 EngUpdateDeviceSurface( 3380 _In_ SURFOBJ *pso, 3381 _Inout_ CLIPOBJ **ppco); 3382 3383 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 3384 3385 #if (NTDDI_VERSION >= NTDDI_WIN7) 3386 3387 ENGAPI 3388 HBITMAP 3389 APIENTRY 3390 EngCreateRedirectionDeviceBitmap( 3391 __in_data_source(USER_MODE) DHSURF dhsurf, 3392 __in_data_source(USER_MODE) SIZEL sizl, 3393 _In_ ULONG iFormatCompat); 3394 3395 VOID 3396 APIENTRY 3397 EngCTGetGammaTable( 3398 _In_ ULONG ulGamma, 3399 _Out_ CONST BYTE** pGammaTable, 3400 _Out_ CONST BYTE** pInverseGammaTable); 3401 3402 ULONG 3403 APIENTRY 3404 EngCTGetCurrentGamma( 3405 _In_ HDEV hdev); 3406 3407 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 3408 3409 /* Graphics Driver Functions */ 3410 3411 typedef BOOL 3412 (APIENTRY FN_DrvAlphaBlend)( 3413 _Inout_ SURFOBJ *psoDest, 3414 _In_ SURFOBJ *psoSrc, 3415 _In_ CLIPOBJ *pco, 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; 3422 3423 typedef BOOL 3424 (APIENTRY FN_DrvAssertMode)( 3425 _In_ DHPDEV dhpdev, 3426 _In_ BOOL bEnable); 3427 typedef FN_DrvAssertMode *PFN_DrvAssertMode; 3428 extern FN_DrvAssertMode DrvAssertMode; 3429 3430 typedef BOOL 3431 (APIENTRY FN_DrvBitBlt)( 3432 _Inout_ SURFOBJ *psoTrg, 3433 _In_opt_ SURFOBJ *psoSrc, 3434 _In_opt_ SURFOBJ *psoMask, 3435 _In_ CLIPOBJ *pco, 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, 3442 _In_ ROP4 rop4); 3443 typedef FN_DrvBitBlt *PFN_DrvBitBlt; 3444 extern FN_DrvBitBlt DrvBitBlt; 3445 3446 typedef VOID 3447 (APIENTRY FN_DrvCompletePDEV)( 3448 _In_ DHPDEV dhpdev, 3449 _In_ HDEV hdev); 3450 typedef FN_DrvCompletePDEV *PFN_DrvCompletePDEV; 3451 extern FN_DrvCompletePDEV DrvCompletePDEV; 3452 3453 typedef BOOL 3454 (APIENTRY FN_DrvCopyBits)( 3455 _In_ SURFOBJ *psoDest, 3456 _In_ SURFOBJ *psoSrc, 3457 _In_ CLIPOBJ *pco, 3458 _In_opt_ XLATEOBJ *pxlo, 3459 _In_ RECTL *prclDest, 3460 _In_ POINTL *pptlSrc); 3461 typedef FN_DrvCopyBits *PFN_DrvCopyBits; 3462 extern FN_DrvCopyBits DrvCopyBits; 3463 3464 typedef HBITMAP 3465 (APIENTRY FN_DrvCreateDeviceBitmap)( 3466 _In_ DHPDEV dhpdev, 3467 _In_ SIZEL sizl, 3468 _In_ ULONG iFormat); 3469 typedef FN_DrvCreateDeviceBitmap *PFN_DrvCreateDeviceBitmap; 3470 extern FN_DrvCreateDeviceBitmap DrvCreateDeviceBitmap; 3471 3472 typedef VOID 3473 (APIENTRY FN_DrvDeleteDeviceBitmap)( 3474 _In_ _Post_ptr_invalid_ DHSURF dhsurf); 3475 typedef FN_DrvDeleteDeviceBitmap *PFN_DrvDeleteDeviceBitmap; 3476 extern FN_DrvDeleteDeviceBitmap DrvDeleteDeviceBitmap; 3477 3478 typedef HBITMAP 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; 3484 3485 typedef LONG 3486 (APIENTRY FN_DrvDescribePixelFormat)( 3487 _In_ DHPDEV dhpdev, 3488 _In_ LONG iPixelFormat, 3489 _In_ ULONG cjpfd, 3490 _Out_opt_ PIXELFORMATDESCRIPTOR *ppfd); 3491 typedef FN_DrvDescribePixelFormat *PFN_DrvDescribePixelFormat; 3492 extern FN_DrvDescribePixelFormat DrvDescribePixelFormat; 3493 3494 typedef VOID 3495 (APIENTRY FN_DrvDestroyFont)( 3496 _In_ FONTOBJ *pfo); 3497 typedef FN_DrvDestroyFont *PFN_DrvDestroyFont; 3498 extern FN_DrvDestroyFont DrvDestroyFont; 3499 3500 typedef VOID 3501 (APIENTRY FN_DrvDisableDriver)(VOID); 3502 typedef FN_DrvDisableDriver *PFN_DrvDisableDriver; 3503 extern FN_DrvDisableDriver DrvDisableDriver; 3504 3505 typedef VOID 3506 (APIENTRY FN_DrvDisablePDEV)( 3507 _In_ DHPDEV dhpdev); 3508 typedef FN_DrvDisablePDEV *PFN_DrvDisablePDEV; 3509 extern FN_DrvDisablePDEV DrvDisablePDEV; 3510 3511 typedef VOID 3512 (APIENTRY FN_DrvDisableSurface)( 3513 _In_ DHPDEV dhpdev); 3514 typedef FN_DrvDisableSurface *PFN_DrvDisableSurface; 3515 extern FN_DrvDisableSurface DrvDisableSurface; 3516 3517 typedef ULONG 3518 (APIENTRY FN_DrvDitherColor)( 3519 _In_ DHPDEV dhpdev, 3520 _In_ ULONG iMode, 3521 _In_ ULONG rgb, 3522 _Inout_updates_(8 * 8) ULONG *pul); // FIXME: compare EngDitherColor 3523 typedef FN_DrvDitherColor *PFN_DrvDitherColor; 3524 extern FN_DrvDitherColor DrvDitherColor; 3525 3526 typedef ULONG 3527 (APIENTRY FN_DrvDrawEscape)( 3528 _In_ SURFOBJ *pso, 3529 _In_ ULONG iEsc, 3530 _In_ CLIPOBJ *pco, 3531 _In_ RECTL *prcl, 3532 _In_ ULONG cjIn, 3533 _In_reads_bytes_(cjIn) PVOID pvIn); 3534 typedef FN_DrvDrawEscape *PFN_DrvDrawEscape; 3535 extern FN_DrvDrawEscape DrvDrawEscape; 3536 3537 typedef BOOL 3538 (APIENTRY FN_DrvEnableDriver)( 3539 _In_ ULONG iEngineVersion, 3540 _In_ ULONG cj, 3541 _Inout_bytecount_(cj) DRVENABLEDATA *pded); // Zero initialized 3542 typedef FN_DrvEnableDriver *PFN_DrvEnableDriver; 3543 extern FN_DrvEnableDriver DrvEnableDriver; 3544 3545 typedef DHPDEV 3546 (APIENTRY FN_DrvEnablePDEV)( 3547 _In_ DEVMODEW *pdm, 3548 _In_ LPWSTR pwszLogAddress, 3549 _In_ ULONG cPat, 3550 _Out_opt_cap_(cPat) HSURF *phsurfPatterns, 3551 _In_ ULONG cjCaps, 3552 _Out_bytecap_(cjCaps) ULONG *pdevcaps, 3553 _In_ ULONG cjDevInfo, 3554 _Out_ DEVINFO *pdi, 3555 _In_ HDEV hdev, 3556 _In_ LPWSTR pwszDeviceName, 3557 _In_ HANDLE hDriver); 3558 typedef FN_DrvEnablePDEV *PFN_DrvEnablePDEV; 3559 extern FN_DrvEnablePDEV DrvEnablePDEV; 3560 3561 typedef HSURF 3562 (APIENTRY FN_DrvEnableSurface)( 3563 _In_ DHPDEV dhpdev); 3564 typedef FN_DrvEnableSurface *PFN_DrvEnableSurface; 3565 extern FN_DrvEnableSurface DrvEnableSurface; 3566 3567 /* DrvEndDoc.fl constants */ 3568 #define ED_ABORTDOC 0x00000001 3569 3570 typedef BOOL 3571 (APIENTRY FN_DrvEndDoc)( 3572 _In_ SURFOBJ *pso, 3573 _In_ FLONG fl); 3574 typedef FN_DrvEndDoc *PFN_DrvEndDoc; 3575 extern FN_DrvEndDoc DrvEndDoc; 3576 3577 typedef ULONG 3578 (APIENTRY FN_DrvEscape)( 3579 _In_ SURFOBJ *pso, 3580 _In_ ULONG iEsc, 3581 _In_ ULONG cjIn, 3582 _In_bytecount_(cjIn) PVOID pvIn, 3583 _In_ ULONG cjOut, 3584 _Out_bytecap_(cjOut) PVOID pvOut); 3585 typedef FN_DrvEscape *PFN_DrvEscape; 3586 extern FN_DrvEscape DrvEscape; 3587 3588 typedef BOOL 3589 (APIENTRY FN_DrvFillPath)( 3590 _Inout_ SURFOBJ *pso, 3591 _In_ PATHOBJ *ppo, 3592 _In_ CLIPOBJ *pco, 3593 _In_ BRUSHOBJ *pbo, 3594 _In_ POINTL *pptlBrushOrg, 3595 _In_ MIX mix, 3596 _In_ FLONG flOptions); 3597 typedef FN_DrvFillPath *PFN_DrvFillPath; 3598 extern FN_DrvFillPath DrvFillPath; 3599 3600 typedef ULONG 3601 (APIENTRY FN_DrvFontManagement)( 3602 _In_ SURFOBJ *pso, 3603 _In_opt_ FONTOBJ *pfo, 3604 _In_ ULONG iMode, 3605 _In_ ULONG cjIn, 3606 _In_bytecount_(cjIn) PVOID pvIn, 3607 _In_ ULONG cjOut, 3608 _Out_bytecap_(cjOut) PVOID pvOut); 3609 typedef FN_DrvFontManagement *PFN_DrvFontManagement; 3610 extern FN_DrvFontManagement DrvFontManagement; 3611 3612 typedef VOID 3613 (APIENTRY FN_DrvFree)( 3614 _In_ _Post_ptr_invalid_ PVOID pv, 3615 _In_ ULONG_PTR id); 3616 typedef FN_DrvFree *PFN_DrvFree; 3617 extern FN_DrvFree DrvFree; 3618 3619 /* DrvGetGlyphMode return values */ 3620 #define FO_HGLYPHS 0L 3621 #define FO_GLYPHBITS 1L 3622 #define FO_PATHOBJ 2L 3623 3624 typedef ULONG 3625 (APIENTRY FN_DrvGetGlyphMode)( 3626 _In_ DHPDEV dhpdev, 3627 _In_ FONTOBJ *pfo); 3628 typedef FN_DrvGetGlyphMode *PFN_DrvGetGlyphMode; 3629 extern FN_DrvGetGlyphMode DrvGetGlyphMode; 3630 3631 typedef ULONG 3632 (APIENTRY FN_DrvGetModes)( 3633 _In_ HANDLE hDriver, 3634 _In_ ULONG cjSize, 3635 _Out_opt_bytecap_(cjSize) DEVMODEW *pdm); 3636 typedef FN_DrvGetModes *PFN_DrvGetModes; 3637 extern FN_DrvGetModes DrvGetModes; 3638 3639 typedef PVOID 3640 (APIENTRY FN_DrvGetTrueTypeFile)( 3641 _In_ ULONG_PTR iFile, 3642 _In_ ULONG *pcj); 3643 typedef FN_DrvGetTrueTypeFile *PFN_DrvGetTrueTypeFile; 3644 extern FN_DrvGetTrueTypeFile DrvGetTrueTypeFile; 3645 3646 typedef BOOL 3647 (APIENTRY FN_DrvGradientFill)( 3648 _Inout_ SURFOBJ *psoDest, 3649 _In_ CLIPOBJ *pco, 3650 _In_opt_ XLATEOBJ *pxlo, 3651 _In_ TRIVERTEX *pVertex, 3652 _In_ ULONG nVertex, 3653 _In_ PVOID pMesh, 3654 _In_ ULONG nMesh, 3655 _In_ RECTL *prclExtents, 3656 _In_ POINTL *pptlDitherOrg, 3657 _In_ ULONG ulMode); 3658 typedef FN_DrvGradientFill *PFN_DrvGradientFill; 3659 extern FN_DrvGradientFill DrvGradientFill; 3660 3661 typedef BOOL 3662 (APIENTRY FN_DrvIcmCheckBitmapBits)( 3663 _In_ DHPDEV dhpdev, 3664 _In_ HANDLE hColorTransform, 3665 _In_ SURFOBJ *pso, 3666 _Out_bytecap_(pso->sizlBitmap.cx * pso->sizlBitmap.cy) PBYTE paResults); 3667 typedef FN_DrvIcmCheckBitmapBits *PFN_DrvIcmCheckBitmapBits; 3668 extern FN_DrvIcmCheckBitmapBits DrvIcmCheckBitmapBits; 3669 3670 typedef HANDLE 3671 (APIENTRY FN_DrvIcmCreateColorTransform)( 3672 _In_ DHPDEV dhpdev, 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; 3683 3684 typedef BOOL 3685 (APIENTRY FN_DrvIcmDeleteColorTransform)( 3686 _In_ DHPDEV dhpdev, 3687 _In_ HANDLE hcmXform); 3688 typedef FN_DrvIcmDeleteColorTransform *PFN_DrvIcmDeleteColorTransform; 3689 extern FN_DrvIcmDeleteColorTransform DrvIcmDeleteColorTransform; 3690 3691 /* DrvIcmSetDeviceGammaRamp.iFormat constants */ 3692 #define IGRF_RGB_256BYTES 0x00000000 3693 #define IGRF_RGB_256WORDS 0x00000001 3694 3695 typedef BOOL 3696 (APIENTRY FN_DrvIcmSetDeviceGammaRamp)( 3697 _In_ DHPDEV dhpdev, 3698 _In_ ULONG iFormat, 3699 _In_bytecount_(sizeof(GAMMARAMP)) LPVOID lpRamp); 3700 typedef FN_DrvIcmSetDeviceGammaRamp *PFN_DrvIcmSetDeviceGammaRamp; 3701 extern FN_DrvIcmSetDeviceGammaRamp DrvIcmSetDeviceGammaRamp; 3702 3703 typedef BOOL 3704 (APIENTRY FN_DrvLineTo)( 3705 _Inout_ SURFOBJ *pso, 3706 _In_ CLIPOBJ *pco, 3707 _In_ BRUSHOBJ *pbo, 3708 _In_ LONG x1, 3709 _In_ LONG y1, 3710 _In_ LONG x2, 3711 _In_ LONG y2, 3712 _In_opt_ RECTL *prclBounds, 3713 _In_ MIX mix); 3714 typedef FN_DrvLineTo *PFN_DrvLineTo; 3715 extern FN_DrvLineTo DrvLineTo; 3716 3717 typedef ULONG_PTR 3718 (APIENTRY FN_DrvLoadFontFile)( 3719 _In_ ULONG cFiles, 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; 3728 3729 typedef VOID 3730 (APIENTRY FN_DrvMovePointer)( 3731 _In_ SURFOBJ *pso, 3732 _In_ LONG x, 3733 _In_ LONG y, 3734 _In_opt_ RECTL *prcl); 3735 typedef FN_DrvMovePointer *PFN_DrvMovePointer; 3736 extern FN_DrvMovePointer DrvMovePointer; 3737 3738 typedef BOOL 3739 (APIENTRY FN_DrvNextBand)( 3740 _In_ SURFOBJ *pso, 3741 _In_ POINTL *pptl); 3742 typedef FN_DrvNextBand *PFN_DrvNextBand; 3743 extern FN_DrvNextBand DrvNextBand; 3744 3745 typedef VOID 3746 (APIENTRY FN_DrvNotify)( 3747 _In_ SURFOBJ *pso, 3748 _In_ ULONG iType, 3749 _In_opt_ PVOID pvData); 3750 typedef FN_DrvNotify *PFN_DrvNotify; 3751 extern FN_DrvNotify DrvNotify; 3752 3753 typedef BOOL 3754 (APIENTRY FN_DrvOffset)( 3755 _In_ SURFOBJ *pso, 3756 _In_ LONG x, 3757 _In_ LONG y, 3758 _In_ FLONG flReserved); 3759 typedef FN_DrvOffset *PFN_DrvOffset; 3760 extern FN_DrvOffset DrvOffset; 3761 3762 typedef BOOL 3763 (APIENTRY FN_DrvPaint)( 3764 _Inout_ SURFOBJ *pso, 3765 _In_ CLIPOBJ *pco, 3766 _In_ BRUSHOBJ *pbo, 3767 _In_ POINTL *pptlBrushOrg, 3768 _In_ MIX mix); 3769 typedef FN_DrvPaint *PFN_DrvPaint; 3770 extern FN_DrvPaint DrvPaint; 3771 3772 typedef BOOL 3773 (APIENTRY FN_DrvPlgBlt)( 3774 _Inout_ SURFOBJ *psoTrg, 3775 _Inout_ SURFOBJ *psoSrc, 3776 _In_opt_ SURFOBJ *psoMsk, 3777 _In_ CLIPOBJ *pco, 3778 _In_opt_ XLATEOBJ *pxlo, 3779 _In_opt_ COLORADJUSTMENT *pca, 3780 _In_opt_ POINTL *pptlBrushOrg, 3781 _In_ POINTFIX *pptfx, 3782 _In_ RECTL *prcl, 3783 _In_opt_ POINTL *pptl, 3784 _In_ ULONG iMode); 3785 typedef FN_DrvPlgBlt *PFN_DrvPlgBlt; 3786 extern FN_DrvPlgBlt DrvPlgBlt; 3787 3788 /* DrvQueryAdvanceWidths.iMode constants */ 3789 #define QAW_GETWIDTHS 0 3790 #define QAW_GETEASYWIDTHS 1 3791 3792 typedef BOOL 3793 (APIENTRY FN_DrvQueryAdvanceWidths)( 3794 _In_ DHPDEV dhpdev, 3795 _In_ FONTOBJ *pfo, 3796 _In_ ULONG iMode, 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; 3802 3803 /* DrvQueryDeviceSupport.iType constants */ 3804 #define QDS_CHECKJPEGFORMAT 0x00000000 3805 #define QDS_CHECKPNGFORMAT 0x00000001 3806 3807 typedef BOOL 3808 (APIENTRY FN_DrvQueryDeviceSupport)( 3809 _In_ SURFOBJ *pso, 3810 _In_ XLATEOBJ *pxlo, 3811 _In_ XFORMOBJ *pxo, 3812 _In_ ULONG iType, 3813 _In_ ULONG cjIn, 3814 _In_bytecount_(cjIn) PVOID pvIn, 3815 _In_ ULONG cjOut, 3816 _Out_bytecap_(cjOut) PVOID pvOut); 3817 typedef FN_DrvQueryDeviceSupport *PFN_DrvQueryDeviceSupport; 3818 extern FN_DrvQueryDeviceSupport DrvQueryDeviceSupport; 3819 3820 /* DrvQueryDriverInfo.dwMode constants */ 3821 #define DRVQUERY_USERMODE 0x00000001 3822 3823 typedef BOOL 3824 (APIENTRY FN_DrvQueryDriverInfo)( 3825 _In_ DWORD dwMode, 3826 _Out_bytecap_(cjBuf) PVOID pBuffer, 3827 _In_ DWORD cjBuf, 3828 _Out_ PDWORD pcbNeeded); 3829 typedef FN_DrvQueryDriverInfo *PFN_DrvQueryDriverInfo; 3830 extern FN_DrvQueryDriverInfo DrvQueryDriverInfo; 3831 3832 typedef PIFIMETRICS 3833 (APIENTRY FN_DrvQueryFont)( 3834 _In_ DHPDEV dhpdev, 3835 _In_ ULONG_PTR iFile, 3836 _In_ ULONG iFace, 3837 _Out_ ULONG_PTR *pid); 3838 typedef FN_DrvQueryFont *PFN_DrvQueryFont; 3839 extern FN_DrvQueryFont DrvQueryFont; 3840 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) 3846 3847 typedef LONG 3848 (APIENTRY FN_DrvQueryFontCaps)( 3849 _In_ ULONG culCaps, 3850 _Out_cap_(culCaps) ULONG *pulCaps); 3851 typedef FN_DrvQueryFontCaps *PFN_DrvQueryFontCaps; 3852 extern FN_DrvQueryFontCaps DrvQueryFontCaps; 3853 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 3863 3864 #define QFD_TT_MONO_BITMAP QFD_TT_GRAY1_BITMAP 3865 3866 typedef LONG 3867 (APIENTRY FN_DrvQueryFontData)( 3868 _In_ DHPDEV dhpdev, 3869 _In_ FONTOBJ *pfo, 3870 _In_ ULONG iMode, 3871 _In_ HGLYPH hg, 3872 _In_opt_ GLYPHDATA *pgd, 3873 _Out_bytecap_(cjSize) PVOID pv, 3874 _In_ ULONG cjSize); 3875 typedef FN_DrvQueryFontData *PFN_DrvQueryFontData; 3876 extern FN_DrvQueryFontData DrvQueryFontData; 3877 3878 /* DrvQueryFontFile.ulMode constants */ 3879 #define QFF_DESCRIPTION 0x00000001 3880 #define QFF_NUMFACES 0x00000002 3881 3882 typedef LONG 3883 (APIENTRY FN_DrvQueryFontFile)( 3884 _In_ ULONG_PTR iFile, 3885 _In_ ULONG ulMode, 3886 _In_ ULONG cjBuf, 3887 _Out_bytecap_(cjBuf) ULONG *pulBuf); 3888 typedef FN_DrvQueryFontFile *PFN_DrvQueryFontFile; 3889 extern FN_DrvQueryFontFile DrvQueryFontFile; 3890 3891 /* DrvQueryFontTree.iMode constants */ 3892 #define QFT_UNICODE 0L 3893 #define QFT_LIGATURES 1L 3894 #define QFT_KERNPAIRS 2L 3895 #define QFT_GLYPHSET 3L 3896 3897 typedef PVOID 3898 (APIENTRY FN_DrvQueryFontTree)( 3899 _In_ DHPDEV dhpdev, 3900 _In_ ULONG_PTR iFile, 3901 _In_ ULONG iFace, 3902 _In_ ULONG iMode, 3903 _Out_ ULONG_PTR *pid); 3904 typedef FN_DrvQueryFontTree *PFN_DrvQueryFontTree; 3905 extern FN_DrvQueryFontTree DrvQueryFontTree; 3906 3907 typedef PFD_GLYPHATTR 3908 (APIENTRY FN_DrvQueryGlyphAttrs)( 3909 _In_ FONTOBJ *pfo, 3910 _In_ ULONG iMode); 3911 typedef FN_DrvQueryGlyphAttrs *PFN_DrvQueryGlyphAttrs; 3912 extern FN_DrvQueryGlyphAttrs DrvQueryGlyphAttrs; 3913 3914 typedef ULONG 3915 (APIENTRY FN_DrvQueryPerBandInfo)( 3916 _In_ SURFOBJ *pso, 3917 _Inout_ PERBANDINFO *pbi); 3918 typedef FN_DrvQueryPerBandInfo *PFN_DrvQueryPerBandInfo; 3919 extern FN_DrvQueryPerBandInfo DrvQueryPerBandInfo; 3920 3921 /* DrvQueryTrueTypeOutline.bMetricsOnly constants */ 3922 #define TTO_METRICS_ONLY 0x00000001 3923 #define TTO_QUBICS 0x00000002 3924 #define TTO_UNHINTED 0x00000004 3925 3926 typedef LONG 3927 (APIENTRY FN_DrvQueryTrueTypeOutline)( 3928 _In_ DHPDEV dhpdev, 3929 _In_ FONTOBJ *pfo, 3930 _In_ HGLYPH hglyph, 3931 _In_ BOOL bMetricsOnly, 3932 _Out_opt_ GLYPHDATA *pgldt, 3933 _In_ ULONG cjBuf, 3934 _Out_bytecap_(cjBuf) TTPOLYGONHEADER *ppoly); 3935 typedef FN_DrvQueryTrueTypeOutline *PFN_DrvQueryTrueTypeOutline; 3936 extern FN_DrvQueryTrueTypeOutline DrvQueryTrueTypeOutline; 3937 3938 typedef LONG 3939 (APIENTRY FN_DrvQueryTrueTypeTable)( 3940 _In_ ULONG_PTR iFile, 3941 _In_ ULONG ulFont, 3942 _In_ ULONG ulTag, 3943 _In_ PTRDIFF dpStart, 3944 _In_ ULONG cjBuf, 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; 3950 3951 /* DrvRealizeBrush.iHatch constants */ 3952 #define RB_DITHERCOLOR 0x80000000L 3953 3954 #define HS_DDI_MAX 6 3955 3956 typedef BOOL 3957 (APIENTRY FN_DrvRealizeBrush)( 3958 _In_ BRUSHOBJ *pbo, 3959 _Inout_ SURFOBJ *psoTarget, // CHECKME 3960 _In_opt_ SURFOBJ *psoPattern, 3961 _In_opt_ SURFOBJ *psoMask, 3962 _In_opt_ XLATEOBJ *pxlo, 3963 _In_ ULONG iHatch); 3964 typedef FN_DrvRealizeBrush *PFN_DrvRealizeBrush; 3965 extern FN_DrvRealizeBrush DrvRealizeBrush; 3966 3967 /* DrvResetDevice return values */ 3968 #define DRD_SUCCESS 0 3969 #define DRD_ERROR 1 3970 3971 typedef ULONG 3972 (APIENTRY FN_DrvResetDevice)( 3973 _In_ DHPDEV dhpdev, 3974 _Reserved_ PVOID Reserved); 3975 typedef FN_DrvResetDevice *PFN_DrvResetDevice; 3976 extern FN_DrvResetDevice DrvResetDevice; 3977 3978 typedef BOOL 3979 (APIENTRY FN_DrvResetPDEV)( 3980 _In_ DHPDEV dhpdevOld, 3981 _In_ DHPDEV dhpdevNew); 3982 typedef FN_DrvResetPDEV *PFN_DrvResetPDEV; 3983 extern FN_DrvResetPDEV DrvResetPDEV; 3984 3985 /* DrvSaveScreenBits.iMode constants */ 3986 #define SS_SAVE 0x00000000 3987 #define SS_RESTORE 0x00000001 3988 #define SS_FREE 0x00000002 3989 3990 typedef ULONG_PTR 3991 (APIENTRY FN_DrvSaveScreenBits)( 3992 _In_ SURFOBJ *pso, 3993 _In_ ULONG iMode, 3994 _In_ ULONG_PTR ident, 3995 _In_ RECTL *prcl); 3996 typedef FN_DrvSaveScreenBits *PFN_DrvSaveScreenBits; 3997 extern FN_DrvSaveScreenBits DrvSaveScreenBits; 3998 3999 typedef BOOL 4000 (APIENTRY FN_DrvSendPage)( 4001 _In_ SURFOBJ *pso); 4002 typedef FN_DrvSendPage *PFN_DrvSendPage; 4003 extern FN_DrvSendPage DrvSendPage; 4004 4005 /* DrvSetPalette range */ 4006 #define WINDDI_MAXSETPALETTECOLORS 256 4007 #define WINDDI_MAXSETPALETTECOLORINDEX 255 4008 4009 typedef BOOL 4010 (APIENTRY FN_DrvSetPalette)( 4011 _In_ DHPDEV dhpdev, 4012 _In_ PALOBJ *ppalo, 4013 _In_ FLONG fl, 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; 4018 4019 typedef BOOL 4020 (APIENTRY FN_DrvSetPixelFormat)( 4021 _In_ SURFOBJ *pso, 4022 _In_ LONG iPixelFormat, 4023 _In_ HWND hwnd); 4024 typedef FN_DrvSetPixelFormat *PFN_DrvSetPixelFormat; 4025 extern FN_DrvSetPixelFormat DrvSetPixelFormat; 4026 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 4033 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 4045 4046 typedef ULONG 4047 (APIENTRY FN_DrvSetPointerShape)( 4048 _In_ SURFOBJ *pso, 4049 _In_opt_ SURFOBJ *psoMask, 4050 _In_opt_ SURFOBJ *psoColor, 4051 _In_ XLATEOBJ *pxlo, 4052 _In_ LONG xHot, 4053 _In_ LONG yHot, 4054 _In_ LONG x, 4055 _In_ LONG y, 4056 _In_ RECTL *prcl, 4057 _In_ FLONG fl); 4058 typedef FN_DrvSetPointerShape *PFN_DrvSetPointerShape; 4059 extern FN_DrvSetPointerShape DrvSetPointerShape; 4060 4061 typedef BOOL 4062 (APIENTRY FN_DrvStartBanding)( 4063 _In_ SURFOBJ *pso, 4064 _In_ POINTL *pptl); 4065 typedef FN_DrvStartBanding *PFN_DrvStartBanding; 4066 extern FN_DrvStartBanding DrvStartBanding; 4067 4068 typedef BOOL 4069 (APIENTRY FN_DrvStartDoc)( 4070 _In_ SURFOBJ *pso, 4071 _In_ LPWSTR pwszDocName, 4072 _In_ DWORD dwJobId); 4073 typedef FN_DrvStartDoc *PFN_DrvStartDoc; 4074 extern FN_DrvStartDoc DrvStartDoc; 4075 4076 typedef BOOL 4077 (APIENTRY FN_DrvStartPage)( 4078 _In_ SURFOBJ *pso); 4079 typedef FN_DrvStartPage *PFN_DrvStartPage; 4080 extern FN_DrvStartPage DrvStartPage; 4081 4082 typedef BOOL 4083 (APIENTRY FN_DrvStretchBlt)( 4084 _Inout_ SURFOBJ *psoDest, 4085 _Inout_ SURFOBJ *psoSrc, 4086 _In_opt_ SURFOBJ *psoMask, 4087 _In_ CLIPOBJ *pco, 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, 4094 _In_ ULONG iMode); 4095 typedef FN_DrvStretchBlt *PFN_DrvStretchBlt; 4096 extern FN_DrvStretchBlt DrvStretchBlt; 4097 4098 typedef BOOL 4099 (APIENTRY FN_DrvStretchBltROP)( 4100 _Inout_ SURFOBJ *psoDest, 4101 _Inout_ SURFOBJ *psoSrc, 4102 _In_opt_ SURFOBJ *psoMask, 4103 _In_ CLIPOBJ *pco, 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, 4110 _In_ ULONG iMode, 4111 _In_ BRUSHOBJ *pbo, 4112 _In_ DWORD rop4); 4113 typedef FN_DrvStretchBltROP *PFN_DrvStretchBltROP; 4114 extern FN_DrvStretchBltROP DrvStretchBltROP; 4115 4116 typedef BOOL 4117 (APIENTRY FN_DrvStrokeAndFillPath)( 4118 _Inout_ SURFOBJ *pso, 4119 _Inout_ PATHOBJ *ppo, 4120 _In_ CLIPOBJ *pco, 4121 _In_opt_ XFORMOBJ *pxo, 4122 _In_ BRUSHOBJ *pboStroke, 4123 _In_ LINEATTRS *plineattrs, 4124 _In_ BRUSHOBJ *pboFill, 4125 _In_ POINTL *pptlBrushOrg, 4126 _In_ MIX mixFill, 4127 _In_ FLONG flOptions); 4128 typedef FN_DrvStrokeAndFillPath *PFN_DrvStrokeAndFillPath; 4129 extern FN_DrvStrokeAndFillPath DrvStrokeAndFillPath; 4130 4131 typedef BOOL 4132 (APIENTRY FN_DrvStrokePath)( 4133 _Inout_ SURFOBJ *pso, 4134 _In_ PATHOBJ *ppo, 4135 _In_ CLIPOBJ *pco, 4136 _In_opt_ XFORMOBJ *pxo, 4137 _In_ BRUSHOBJ *pbo, 4138 _In_ POINTL *pptlBrushOrg, 4139 _In_ LINEATTRS *plineattrs, 4140 _In_ MIX mix); 4141 typedef FN_DrvStrokePath *PFN_DrvStrokePath; 4142 extern FN_DrvStrokePath DrvStrokePath; 4143 4144 typedef BOOL 4145 (APIENTRY FN_DrvSwapBuffers)( 4146 _In_ SURFOBJ *pso, 4147 _In_ WNDOBJ *pwo); 4148 typedef FN_DrvSwapBuffers *PFN_DrvSwapBuffers; 4149 extern FN_DrvSwapBuffers DrvSwapBuffers; 4150 4151 typedef VOID 4152 (APIENTRY FN_DrvSynchronize)( 4153 _In_ DHPDEV dhpdev, 4154 _In_count_c_(0) RECTL *prcl); // should be ignored 4155 typedef FN_DrvSynchronize *PFN_DrvSynchronize; 4156 extern FN_DrvSynchronize DrvSynchronize; 4157 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 4163 4164 typedef VOID 4165 (APIENTRY FN_DrvSynchronizeSurface)( 4166 _In_ SURFOBJ *pso, 4167 _In_opt_ RECTL *prcl, 4168 _In_ FLONG fl); 4169 typedef FN_DrvSynchronizeSurface *PFN_DrvSynchronizeSurface; 4170 extern FN_DrvSynchronizeSurface DrvSynchronizeSurface; 4171 4172 typedef BOOL 4173 (APIENTRY FN_DrvTextOut)( 4174 _In_ SURFOBJ *pso, 4175 _In_ STROBJ *pstro, 4176 _In_ FONTOBJ *pfo, 4177 _In_ CLIPOBJ *pco, 4178 _Null_ RECTL *prclExtra, 4179 _In_opt_ RECTL *prclOpaque, 4180 _In_ BRUSHOBJ *pboFore, 4181 _In_ BRUSHOBJ *pboOpaque, 4182 _In_ POINTL *pptlOrg, 4183 _In_ MIX mix); 4184 typedef FN_DrvTextOut *PFN_DrvTextOut; 4185 extern FN_DrvTextOut DrvTextOut; 4186 4187 typedef BOOL 4188 (APIENTRY FN_DrvTransparentBlt)( 4189 _Inout_ SURFOBJ *psoDst, 4190 _In_ SURFOBJ *psoSrc, 4191 _In_ CLIPOBJ *pco, 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; 4199 4200 typedef BOOL 4201 (APIENTRY FN_DrvUnloadFontFile)( 4202 _In_ ULONG_PTR iFile); 4203 typedef FN_DrvUnloadFontFile *PFN_DrvUnloadFontFile; 4204 extern FN_DrvUnloadFontFile DrvUnloadFontFile; 4205 4206 /* Direct draw */ 4207 4208 typedef VOID 4209 (APIENTRY FN_DrvDisableDirectDraw)( 4210 _In_ DHPDEV dhpdev); 4211 typedef FN_DrvDisableDirectDraw *PFN_DrvDisableDirectDraw; 4212 extern FN_DrvDisableDirectDraw DrvDisableDirectDraw; 4213 4214 typedef BOOL 4215 (APIENTRY FN_DrvEnableDirectDraw)( 4216 _In_ DHPDEV dhpdev, 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; 4222 4223 typedef BOOL 4224 (APIENTRY FN_DrvGetDirectDrawInfo)( 4225 _In_ DHPDEV dhpdev, 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; 4233 4234 typedef BOOL //DECLSPEC_DEPRECATED_DDK 4235 (APIENTRY FN_DrvQuerySpoolType)( 4236 _In_ DHPDEV dhpdev, 4237 _In_ LPWSTR pwchType); 4238 typedef FN_DrvQuerySpoolType *PFN_DrvQuerySpoolType; 4239 extern FN_DrvQuerySpoolType DrvQuerySpoolType; 4240 4241 typedef LONG 4242 (APIENTRY FN_DrvQueryTrueTypeSection)( 4243 ULONG, 4244 ULONG, 4245 ULONG, 4246 HANDLE *, 4247 PTRDIFF *); 4248 typedef FN_DrvQueryTrueTypeSection *PFN_DrvQueryTrueTypeSection; 4249 extern FN_DrvQueryTrueTypeSection DrvQueryTrueTypeSection; 4250 4251 DECLSPEC_DEPRECATED_DDK 4252 typedef VOID 4253 (APIENTRY FN_DrvMovePanning)( 4254 _In_ LONG x, 4255 _In_ LONG y, 4256 _In_ FLONG fl); 4257 typedef FN_DrvMovePanning *PFN_DrvMovePanning; 4258 extern FN_DrvMovePanning DrvMovePanning; 4259 4260 #if (NTDDI_VERSION >= NTDDI_VISTA) 4261 4262 typedef LONG 4263 (APIENTRY FN_DrvRenderHint)( 4264 _In_ DHPDEV dhpdev, 4265 _In_ ULONG NotifyCode, 4266 _In_ SIZE_T Length, 4267 _In_reads_bytes_opt_(Length) PVOID Data); 4268 typedef FN_DrvRenderHint *PFN_DrvRenderHint; 4269 extern FN_DrvRenderHint DrvRenderHint; 4270 4271 typedef struct _DRH_APIBITMAPDATA 4272 { 4273 SURFOBJ *pso; 4274 BOOL b; 4275 } DRH_APIBITMAPDATA, *PDRH_APIBITMAPDATA; 4276 4277 #define DRH_APIBITMAP 0x00000001 4278 4279 typedef HANDLE 4280 (APIENTRY FN_EngCreateRectRgn)( 4281 _In_ INT left, 4282 _In_ INT top, 4283 _In_ INT right, 4284 _In_ INT bottom); 4285 typedef FN_EngCreateRectRgn *PFN_EngCreateRectRgn; 4286 4287 typedef VOID 4288 (APIENTRY FN_EngDeleteRgn)( 4289 HANDLE hrgn); 4290 typedef FN_EngDeleteRgn *PFN_EngDeleteRgn; 4291 4292 typedef INT 4293 (APIENTRY FN_EngCombineRgn)( 4294 _In_ HANDLE hrgnTrg, 4295 _In_ HANDLE hrgnSrc1, 4296 _In_ HANDLE hrgnSrc2, 4297 _In_ INT iMode); 4298 typedef FN_EngCombineRgn *PFN_EngCombineRgn; 4299 4300 typedef INT 4301 (APIENTRY FN_EngCopyRgn)( 4302 _In_ HANDLE hrgnDst, 4303 _In_ HANDLE hrgnSrc); 4304 typedef FN_EngCopyRgn *PFN_EngCopyRgn; 4305 4306 typedef INT 4307 (APIENTRY FN_EngIntersectRgn)( 4308 _In_ HANDLE hrgnResult, 4309 _In_ HANDLE hRgnA, 4310 _In_ HANDLE hRgnB); 4311 typedef FN_EngIntersectRgn *PFN_EngIntersectRgn; 4312 4313 typedef INT 4314 (APIENTRY FN_EngSubtractRgn)( 4315 _In_ HANDLE hrgnResult, 4316 _In_ HANDLE hRgnA, 4317 _In_ HANDLE hRgnB); 4318 typedef FN_EngSubtractRgn *PFN_EngSubtractRgn; 4319 4320 typedef INT 4321 (APIENTRY FN_EngUnionRgn)( 4322 _In_ HANDLE hrgnResult, 4323 _In_ HANDLE hRgnA, 4324 _In_ HANDLE hRgnB); 4325 typedef FN_EngUnionRgn *PFN_EngUnionRgn; 4326 4327 typedef INT 4328 (APIENTRY FN_EngXorRgn)( 4329 _In_ HANDLE hrgnResult, 4330 _In_ HANDLE hRgnA, 4331 _In_ HANDLE hRgnB); 4332 typedef FN_EngXorRgn *PFN_EngXorRgn; 4333 4334 #endif /* (NTDDI_VERSION >= NTDDI_VISTA) */ 4335 4336 #if (NTDDI_VERSION >= NTDDI_WIN7) 4337 4338 /* DrvCreateDeviceBitmapEx() flags */ 4339 #define CDBEX_REDIRECTION 0x00000001 4340 #define CDBEX_DXINTEROP 0x00000002 4341 4342 typedef HBITMAP 4343 (APIENTRY FN_DrvCreateDeviceBitmapEx)( 4344 _In_ DHPDEV dhpdev, 4345 _In_ SIZEL sizl, 4346 _In_ ULONG iFormat, 4347 _In_ DWORD Flags, 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 FN_DrvCreateDeviceBitmapEx DrvCreateDeviceBitmapEx; 4356 4357 typedef VOID 4358 (APIENTRY FN_DrvDeleteDeviceBitmapEx)( 4359 _Inout_ DHSURF); 4360 typedef FN_DrvDeleteDeviceBitmapEx *PFN_DrvDeleteDeviceBitmapEx; 4361 extern FN_DrvDeleteDeviceBitmapEx DrvDeleteDeviceBitmapEx; 4362 4363 typedef BOOL 4364 (APIENTRY FN_DrvAssociateSharedSurface)( 4365 _In_ SURFOBJ* psoSurf, 4366 _In_ HANDLE hPhysicalSurface, 4367 _In_ HANDLE hLogicalSurface, 4368 _In_ SIZEL sizl); 4369 typedef FN_DrvAssociateSharedSurface *PFN_DrvAssociateSharedSurface; 4370 extern FN_DrvAssociateSharedSurface DrvAssociateSharedSurface; 4371 4372 typedef LONG 4373 (APIENTRY FN_DrvSynchronizeRedirectionBitmaps)( 4374 _In_ DHPDEV dhpdev, 4375 _Out_ UINT64* puiFenceID); 4376 typedef FN_DrvSynchronizeRedirectionBitmaps *PFN_DrvSynchronizeRedirectionBitmaps; 4377 extern FN_DrvSynchronizeRedirectionBitmaps DrvSynchronizeRedirectionBitmaps; 4378 4379 #define WINDDI_MAX_BROADCAST_CONTEXT 64 4380 typedef struct tagCDDDXGK_REDIRBITMAPPRESENTINFO 4381 { 4382 UINT NumDirtyRects; 4383 PRECT DirtyRect; 4384 UINT NumContexts; 4385 HANDLE hContext[WINDDI_MAX_BROADCAST_CONTEXT+1]; 4386 } CDDDXGK_REDIRBITMAPPRESENTINFO; 4387 4388 typedef BOOL 4389 (APIENTRY FN_DrvAccumulateD3DDirtyRect)( 4390 _In_ SURFOBJ* psoSurf, 4391 _In_ CDDDXGK_REDIRBITMAPPRESENTINFO* pDirty); 4392 typedef FN_DrvAccumulateD3DDirtyRect *PFN_DrvAccumulateD3DDirtyRect; 4393 extern FN_DrvAccumulateD3DDirtyRect DrvAccumulateD3DDirtyRect; 4394 4395 typedef BOOL 4396 (APIENTRY FN_DrvStartDxInterop)( 4397 _In_ SURFOBJ* psoSurf, 4398 _In_ BOOL bDiscard, 4399 _In_ PVOID KernelModeDeviceHandle); 4400 typedef FN_DrvStartDxInterop *PFN_DrvStartDxInterop; 4401 extern FN_DrvStartDxInterop DrvStartDxInterop; 4402 4403 typedef BOOL 4404 (APIENTRY FN_DrvEndDxInterop)( 4405 _In_ SURFOBJ* psoSurf, 4406 _In_ BOOL bDiscard, 4407 _Out_ BOOL* bDeviceLost, 4408 _In_ PVOID KernelModeDeviceHandle); 4409 typedef FN_DrvEndDxInterop *PFN_DrvEndDxInterop; 4410 extern FN_DrvEndDxInterop DrvEndDxInterop; 4411 4412 typedef VOID 4413 (APIENTRY FN_DrvLockDisplayArea)( 4414 _In_ DHPDEV dhpdev, 4415 _In_opt_ RECTL *prcl); 4416 typedef FN_DrvLockDisplayArea *PFN_DrvLockDisplayArea; 4417 extern FN_DrvLockDisplayArea DrvLockDisplayArea; 4418 4419 typedef VOID 4420 (APIENTRY FN_DrvUnlockDisplayArea)( 4421 _In_ DHPDEV dhpdev, 4422 _In_opt_ RECTL *prcl); 4423 typedef FN_DrvUnlockDisplayArea *PFN_DrvUnlockDisplayArea; 4424 extern FN_DrvUnlockDisplayArea DrvUnlockDisplayArea; 4425 4426 #endif /* (NTDDI_VERSION >= NTDDI_WIN7) */ 4427 4428 #ifdef __cplusplus 4429 } 4430 #endif 4431 4432 #endif /* defined __VIDEO_H__ */ 4433 4434 #endif /* _WINDDI_ */ 4435