2 #ifndef __WIN32K_DRIVER_H
3 #define __WIN32K_DRIVER_H
5 #include <ddk/winddi.h>
7 typedef BOOL (STDCALL
*PGD_ENABLEDRIVER
)(ULONG
, ULONG
, PDRVENABLEDATA
);
8 typedef DHPDEV (STDCALL
*PGD_ENABLEPDEV
)(DEVMODEW
*,
19 typedef VOID (STDCALL
*PGD_COMPLETEPDEV
)(DHPDEV
, HDEV
);
20 typedef VOID (STDCALL
*PGD_DISABLEPDEV
)(DHPDEV
);
21 typedef HSURF (STDCALL
*PGD_ENABLESURFACE
)(DHPDEV
);
22 typedef VOID (STDCALL
*PGD_DISABLESURFACE
)(DHPDEV
);
23 typedef BOOL (STDCALL
*PGD_ASSERTMODE
)(DHPDEV
, BOOL
);
24 typedef BOOL (STDCALL
*PGD_OFFSET
)(SURFOBJ
*, LONG
, LONG
, FLONG
);
25 typedef BOOL (STDCALL
*PGD_RESETPDEV
)(DHPDEV
, DHPDEV
);
26 typedef VOID (STDCALL
*PGD_DISABLEDRIVER
)(VOID
);
27 typedef HBITMAP (STDCALL
*PGD_CREATEDEVICEBITMAP
)(DHPDEV
, SIZEL
, ULONG
);
28 typedef VOID (STDCALL
*PGD_DELETEDEVICEBITMAP
)(DHSURF
);
29 typedef BOOL (STDCALL
*PGD_ALPHABLEND
)(SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, RECTL
*, RECTL
*, BLENDOBJ
*);
30 typedef BOOL (STDCALL
*PGD_REALIZEBRUSH
)(BRUSHOBJ
*, SURFOBJ
*, SURFOBJ
*, SURFOBJ
*,
32 typedef ULONG (STDCALL
*PGD_DITHERCOLOR
)(DHPDEV
, ULONG
, ULONG
, PULONG
);
33 typedef BOOL (STDCALL
*PGD_STROKEPATH
)(SURFOBJ
*, PATHOBJ
*, CLIPOBJ
*, XFORMOBJ
*,
34 BRUSHOBJ
*, POINTL
*, PLINEATTRS
, MIX
);
35 typedef BOOL (STDCALL
*PGD_FILLPATH
)(SURFOBJ
*, PATHOBJ
*, CLIPOBJ
*, BRUSHOBJ
*,
37 typedef BOOL (STDCALL
*PGD_STROKEANDFILLPATH
)(SURFOBJ
*, PATHOBJ
*, CLIPOBJ
*,
38 XFORMOBJ
*, BRUSHOBJ
*, PLINEATTRS
,
39 BRUSHOBJ
*, POINTL
*, MIX
, ULONG
);
40 typedef BOOL (STDCALL
*PGD_PAINT
)(SURFOBJ
*, CLIPOBJ
*, BRUSHOBJ
*, POINTL
*, MIX
);
41 typedef BOOL (STDCALL
*PGD_BITBLT
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*,
42 XLATEOBJ
*, RECTL
*, POINTL
*, POINTL
*, BRUSHOBJ
*,
44 typedef BOOL (STDCALL
*PGD_TRANSPARENTBLT
)(SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*,
45 RECTL
*, RECTL
*, ULONG
, ULONG
);
46 typedef BOOL (STDCALL
*PGD_COPYBITS
)(SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*,
48 typedef BOOL (STDCALL
*PGD_STRETCHBLT
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*,
49 XLATEOBJ
*, COLORADJUSTMENT
*, POINTL
*,
50 RECTL
*, RECTL
*, POINTL
*, ULONG
);
51 typedef BOOL (STDCALL
*PGD_STRETCHBLTROP
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*,
52 XLATEOBJ
*, COLORADJUSTMENT
*, POINTL
*,
53 RECTL
*, RECTL
*, POINTL
*, ULONG
,
55 typedef BOOL (STDCALL
*PGD_SETPALETTE
)(DHPDEV
, PALOBJ
*, ULONG
, ULONG
, ULONG
);
56 typedef BOOL (STDCALL
*PGD_TEXTOUT
)(SURFOBJ
*, STROBJ
*, FONTOBJ
*, CLIPOBJ
*, RECTL
*,
57 RECTL
*, BRUSHOBJ
*, BRUSHOBJ
*, POINTL
*, MIX
);
58 typedef ULONG (STDCALL
*PGD_ESCAPE
)(SURFOBJ
*, ULONG
, ULONG
, PVOID
*, ULONG
, PVOID
*);
59 typedef ULONG (STDCALL
*PGD_DRAWESCAPE
)(SURFOBJ
*, ULONG
, CLIPOBJ
*, RECTL
*, ULONG
,
61 typedef PIFIMETRICS (STDCALL
*PGD_QUERYFONT
)(DHPDEV
, ULONG
, ULONG
, PULONG
);
62 typedef PVOID (STDCALL
*PGD_QUERYFONTTREE
)(DHPDEV
, ULONG
, ULONG
, ULONG
, PULONG
);
63 typedef LONG (STDCALL
*PGD_QUERYFONTDATA
)(DHPDEV
, FONTOBJ
*, ULONG
, HGLYPH
, GLYPHDATA
*,
65 typedef ULONG (STDCALL
*PGD_SETPOINTERSHAPE
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, XLATEOBJ
*,
66 LONG
, LONG
, LONG
, LONG
, RECTL
*, ULONG
);
67 typedef VOID (STDCALL
*PGD_MOVEPOINTER
)(SURFOBJ
*, LONG
, LONG
, RECTL
*);
68 typedef BOOL (STDCALL
*PGD_LINETO
)(SURFOBJ
*, CLIPOBJ
*, BRUSHOBJ
*, LONG
, LONG
, LONG
,
70 typedef BOOL (STDCALL
*PGD_SENDPAGE
)(SURFOBJ
*);
71 typedef BOOL (STDCALL
*PGD_STARTPAGE
)(SURFOBJ
*);
72 typedef BOOL (STDCALL
*PGD_ENDDOC
)(SURFOBJ
*, ULONG
);
73 typedef BOOL (STDCALL
*PGD_STARTDOC
)(SURFOBJ
*, PWSTR
, DWORD
);
74 typedef ULONG (STDCALL
*PGD_GETGLYPHMODE
)(DHPDEV
, FONTOBJ
*);
75 typedef VOID (STDCALL
*PGD_SYNCHRONIZE
)(DHPDEV
, RECTL
*);
76 typedef ULONG (STDCALL
*PGD_SAVESCREENBITS
)(SURFOBJ
*, ULONG
, ULONG
, RECTL
*);
77 typedef ULONG (STDCALL
*PGD_GETMODES
)(HANDLE
, ULONG
, PDEVMODEW
);
78 typedef VOID (STDCALL
*PGD_FREE
)(PVOID
, ULONG
);
79 typedef VOID (STDCALL
*PGD_DESTROYFONT
)(FONTOBJ
*);
80 typedef LONG (STDCALL
*PGD_QUERYFONTCAPS
)(ULONG
, PULONG
);
81 typedef ULONG (STDCALL
*PGD_LOADFONTFILE
)(ULONG
, PVOID
, ULONG
, ULONG
);
82 typedef BOOL (STDCALL
*PGD_UNLOADFONTFILE
)(ULONG
);
83 typedef ULONG (STDCALL
*PGD_FONTMANAGEMENT
)(SURFOBJ
*, FONTOBJ
*, ULONG
, ULONG
, PVOID
,
85 typedef LONG (STDCALL
*PGD_QUERYTRUETYPETABLE
)(ULONG
, ULONG
, ULONG
, PTRDIFF
, ULONG
,
87 typedef LONG (STDCALL
*PGD_QUERYTRUETYPEOUTLINE
)(DHPDEV
, FONTOBJ
*, HGLYPH
, BOOL
,
88 GLYPHDATA
*, ULONG
, TTPOLYGONHEADER
*);
89 typedef PVOID (STDCALL
*PGD_GETTRUETYPEFILE
)(ULONG
, PULONG
);
90 typedef LONG (STDCALL
*PGD_QUERYFONTFILE
)(ULONG
, ULONG
, ULONG
, PULONG
);
91 typedef BOOL (STDCALL
*PGD_QUERYADVANCEWIDTHS
)(DHPDEV
, FONTOBJ
*, ULONG
, HGLYPH
*,
93 typedef BOOL (STDCALL
*PGD_SETPIXELFORMAT
)(SURFOBJ
*, LONG
, ULONG
);
94 typedef LONG (STDCALL
*PGD_DESCRIBEPIXELFORMAT
)(DHPDEV
, LONG
, ULONG
,
95 PPIXELFORMATDESCRIPTOR
);
96 typedef BOOL (STDCALL
*PGD_SWAPBUFFERS
)(SURFOBJ
*, PWNDOBJ
);
97 typedef BOOL (STDCALL
*PGD_STARTBANDING
)(SURFOBJ
*, POINTL
*);
98 typedef BOOL (STDCALL
*PGD_NEXTBAND
)(SURFOBJ
*, POINTL
*);
100 typedef BOOL (STDCALL
*PGD_GETDIRECTDRAWINFO
)(DHPDEV
, PDD_HALINFO
, PDWORD
, VIDEOMEMORY
*, PDWORD
, PDWORD
);
101 typedef BOOL (STDCALL
*PGD_ENABLEDIRECTDRAW
)(DHPDEV
, PDD_CALLBACKS
, PDD_SURFACECALLBACKS
, PDD_PALETTECALLBACKS
);
102 typedef VOID (STDCALL
*PGD_DISABLEDIRECTDRAW
)(DHPDEV
);
104 typedef LONG (STDCALL
*PGD_QUERYSPOOLTYPE
)(DHPDEV
, LPWSTR
);
106 typedef BOOL (STDCALL
*PGD_GRADIENTFILL
)(SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, TRIVERTEX
*, ULONG
, PVOID
, ULONG
, RECTL
*, POINTL
*, ULONG
);
108 typedef VOID (STDCALL
*PGD_SYNCHRONIZESURFACE
)(SURFOBJ
*, RECTL
*, FLONG
);
110 typedef struct _DRIVER_FUNCTIONS
112 PGD_ENABLEDRIVER EnableDriver
;
113 PGD_ENABLEPDEV EnablePDEV
;
114 PGD_COMPLETEPDEV CompletePDEV
;
115 PGD_DISABLEPDEV DisablePDEV
;
116 PGD_ENABLESURFACE EnableSurface
;
117 PGD_DISABLESURFACE DisableSurface
;
118 PGD_ASSERTMODE AssertMode
;
120 PGD_RESETPDEV ResetPDEV
;
121 PGD_DISABLEDRIVER DisableDriver
;
122 PGD_CREATEDEVICEBITMAP CreateDeviceBitmap
;
123 PGD_DELETEDEVICEBITMAP DeleteDeviceBitmap
;
124 PGD_REALIZEBRUSH RealizeBrush
;
125 PGD_DITHERCOLOR DitherColor
;
126 PGD_STROKEPATH StrokePath
;
127 PGD_FILLPATH FillPath
;
128 PGD_STROKEANDFILLPATH StrokeAndFillPath
;
131 PGD_TRANSPARENTBLT TransparentBlt
;
132 PGD_COPYBITS CopyBits
;
133 PGD_STRETCHBLT StretchBlt
;
134 PGD_STRETCHBLTROP StretchBltROP
;
135 PGD_SETPALETTE SetPalette
;
138 PGD_DRAWESCAPE DrawEscape
;
139 PGD_QUERYFONT QueryFont
;
140 PGD_QUERYFONTTREE QueryFontTree
;
141 PGD_QUERYFONTDATA QueryFontData
;
142 PGD_SETPOINTERSHAPE SetPointerShape
;
143 PGD_MOVEPOINTER MovePointer
;
145 PGD_SENDPAGE SendPage
;
146 PGD_STARTPAGE StartPage
;
148 PGD_STARTDOC StartDoc
;
149 PGD_GETGLYPHMODE GetGlyphMode
;
150 PGD_SYNCHRONIZE Synchronize
;
151 PGD_SAVESCREENBITS SaveScreenBits
;
152 PGD_GETMODES GetModes
;
154 PGD_DESTROYFONT DestroyFont
;
155 PGD_QUERYFONTCAPS QueryFontCaps
;
156 PGD_LOADFONTFILE LoadFontFile
;
157 PGD_UNLOADFONTFILE UnloadFontFile
;
158 PGD_FONTMANAGEMENT FontManagement
;
159 PGD_QUERYTRUETYPETABLE QueryTrueTypeTable
;
160 PGD_QUERYTRUETYPEOUTLINE QueryTrueTypeOutline
;
161 PGD_GETTRUETYPEFILE GetTrueTypeFile
;
162 PGD_QUERYFONTFILE QueryFontFile
;
163 PGD_QUERYADVANCEWIDTHS QueryAdvanceWidths
;
164 PGD_SETPIXELFORMAT SetPixelFormat
;
165 PGD_DESCRIBEPIXELFORMAT DescribePixelFormat
;
166 PGD_SWAPBUFFERS SwapBuffers
;
167 PGD_STARTBANDING StartBanding
;
168 PGD_NEXTBAND NextBand
;
169 PGD_GETDIRECTDRAWINFO GetDirectDrawInfo
;
170 PGD_ENABLEDIRECTDRAW EnableDirectDraw
;
171 PGD_DISABLEDIRECTDRAW DisableDirectDraw
;
172 PGD_QUERYSPOOLTYPE QuerySpoolType
;
173 PGD_GRADIENTFILL GradientFill
;
174 PGD_SYNCHRONIZESURFACE SynchronizeSurface
;
175 PGD_ALPHABLEND AlphaBlend
;
176 } DRIVER_FUNCTIONS
, *PDRIVER_FUNCTIONS
;
178 #ifndef NTOS_MODE_USER
180 BOOL
DRIVER_RegisterDriver(LPCWSTR Name
, PGD_ENABLEDRIVER EnableDriver
);
181 PGD_ENABLEDRIVER
DRIVER_FindDDIDriver(LPCWSTR Name
);
182 PFILE_OBJECT
DRIVER_FindMPDriver(ULONG DisplayNumber
);
183 BOOL
DRIVER_BuildDDIFunctions(PDRVENABLEDATA DED
,
184 PDRIVER_FUNCTIONS DF
);
185 BOOL
DRIVER_UnregisterDriver(LPCWSTR Name
);
186 INT
DRIVER_ReferenceDriver (LPCWSTR Name
);
187 INT
DRIVER_UnreferenceDriver (LPCWSTR Name
);