xref: /reactos/sdk/include/psdk/ntddvdeo.h (revision 321bcc05)
1 /*
2  * ntddvdeo.h
3  *
4  * Definitions for video devices
5  *
6  * This file is part of the w32api package.
7  *
8  * Contributors:
9  *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
10  *
11  * THIS SOFTWARE IS NOT COPYRIGHTED
12  *
13  * This source code is offered for use in the public domain. You may
14  * use, modify or distribute it freely.
15  *
16  * This code is distributed in the hope that it will be useful but
17  * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
18  * DISCLAIMED. This includes but is not limited to warranties of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
20  *
21  */
22 
23 #pragma once
24 #define _NTDDVDEO_
25 
26 DEFINE_GUID(GUID_DEVINTERFACE_DISPLAY_ADAPTER, \
27   0x5b45201d, 0xf2f2, 0x4f3b, 0x85, 0xbb, 0x30, 0xff, 0x1f, 0x95, 0x35, 0x99);
28 
29 #ifndef GUID_DEFS_ONLY
30 
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
34 
35 #define VIDEO_DEVICE_NAME                 "DISPLAY%d"
36 #define WVIDEO_DEVICE_NAME                L"DISPLAY%d"
37 
38 #define DD_FULLSCREEN_VIDEO_DEVICE_NAME   L"\\Device\\FSVideo"
39 
40 
41 #define IOCTL_VIDEO_ENABLE_VDM \
42   CTL_CODE(FILE_DEVICE_VIDEO, 0x00, METHOD_BUFFERED, FILE_ANY_ACCESS)
43 
44 #define IOCTL_VIDEO_DISABLE_VDM \
45   CTL_CODE(FILE_DEVICE_VIDEO, 0x01, METHOD_BUFFERED, FILE_ANY_ACCESS)
46 
47 #define IOCTL_VIDEO_REGISTER_VDM \
48   CTL_CODE(FILE_DEVICE_VIDEO, 0x02, METHOD_BUFFERED, FILE_ANY_ACCESS)
49 
50 #define IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE \
51   CTL_CODE(FILE_DEVICE_VIDEO, 0x03, METHOD_BUFFERED, FILE_ANY_ACCESS)
52 
53 #define IOCTL_VIDEO_GET_OUTPUT_DEVICE_POWER_STATE \
54   CTL_CODE(FILE_DEVICE_VIDEO, 0x04, METHOD_BUFFERED, FILE_ANY_ACCESS)
55 
56 #define IOCTL_VIDEO_MONITOR_DEVICE \
57   CTL_CODE(FILE_DEVICE_VIDEO, 0x05, METHOD_BUFFERED, FILE_ANY_ACCESS)
58 
59 #define IOCTL_VIDEO_ENUM_MONITOR_PDO \
60   CTL_CODE(FILE_DEVICE_VIDEO, 0x06, METHOD_BUFFERED, FILE_ANY_ACCESS)
61 
62 #define IOCTL_VIDEO_INIT_WIN32K_CALLBACKS \
63   CTL_CODE(FILE_DEVICE_VIDEO, 0x07, METHOD_BUFFERED, FILE_ANY_ACCESS)
64 
65 #define IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS \
66   CTL_CODE(FILE_DEVICE_VIDEO, 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS)
67 
68 #define IOCTL_VIDEO_IS_VGA_DEVICE \
69   CTL_CODE(FILE_DEVICE_VIDEO, 0x09, METHOD_BUFFERED, FILE_ANY_ACCESS)
70 
71 #define IOCTL_VIDEO_USE_DEVICE_IN_SESSION \
72   CTL_CODE(FILE_DEVICE_VIDEO, 0x0a, METHOD_BUFFERED, FILE_ANY_ACCESS)
73 
74 #define IOCTL_VIDEO_PREPARE_FOR_EARECOVERY \
75   CTL_CODE(FILE_DEVICE_VIDEO, 0x0b, METHOD_BUFFERED, FILE_ANY_ACCESS)
76 
77 #define IOCTL_VIDEO_DISABLE_CURSOR \
78   CTL_CODE (FILE_DEVICE_VIDEO, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS)
79 
80 #define IOCTL_VIDEO_DISABLE_POINTER \
81   CTL_CODE(FILE_DEVICE_VIDEO, 0x10f, METHOD_BUFFERED, FILE_ANY_ACCESS)
82 
83 #define IOCTL_VIDEO_ENABLE_CURSOR \
84   CTL_CODE(FILE_DEVICE_VIDEO, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS)
85 
86 #define IOCTL_VIDEO_ENABLE_POINTER \
87   CTL_CODE(FILE_DEVICE_VIDEO, 0x10e, METHOD_BUFFERED, FILE_ANY_ACCESS)
88 
89 #define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES \
90   CTL_CODE(FILE_DEVICE_VIDEO, 0x119, METHOD_BUFFERED, FILE_ANY_ACCESS)
91 
92 #define IOCTL_VIDEO_GET_BANK_SELECT_CODE \
93   CTL_CODE(FILE_DEVICE_VIDEO, 0x115, METHOD_BUFFERED, FILE_ANY_ACCESS)
94 
95 #define IOCTL_VIDEO_GET_CHILD_STATE \
96   CTL_CODE(FILE_DEVICE_VIDEO, 0x120, METHOD_BUFFERED, FILE_ANY_ACCESS)
97 
98 #define IOCTL_VIDEO_GET_POWER_MANAGEMENT \
99   CTL_CODE(FILE_DEVICE_VIDEO, 0x11c, METHOD_BUFFERED, FILE_ANY_ACCESS)
100 
101 #define IOCTL_VIDEO_LOAD_AND_SET_FONT \
102   CTL_CODE(FILE_DEVICE_VIDEO, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS)
103 
104 #define IOCTL_VIDEO_MAP_VIDEO_MEMORY \
105   CTL_CODE(FILE_DEVICE_VIDEO, 0x116, METHOD_BUFFERED, FILE_ANY_ACCESS)
106 
107 #define IOCTL_VIDEO_QUERY_AVAIL_MODES \
108   CTL_CODE(FILE_DEVICE_VIDEO, 0x100, METHOD_BUFFERED, FILE_ANY_ACCESS)
109 
110 #define IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES \
111   CTL_CODE(FILE_DEVICE_VIDEO, 0x11a, METHOD_BUFFERED, FILE_ANY_ACCESS)
112 
113 #define IOCTL_VIDEO_QUERY_CURRENT_MODE \
114   CTL_CODE(FILE_DEVICE_VIDEO, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS)
115 
116 #define IOCTL_VIDEO_QUERY_CURSOR_ATTR \
117   CTL_CODE(FILE_DEVICE_VIDEO, 0x10b, METHOD_BUFFERED, FILE_ANY_ACCESS)
118 
119 #define IOCTL_VIDEO_QUERY_CURSOR_POSITION \
120   CTL_CODE(FILE_DEVICE_VIDEO, 0x10d, METHOD_BUFFERED, FILE_ANY_ACCESS)
121 
122 #define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES \
123   CTL_CODE(FILE_DEVICE_VIDEO, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS)
124 
125 #define IOCTL_VIDEO_QUERY_POINTER_ATTR \
126   CTL_CODE(FILE_DEVICE_VIDEO, 0x111, METHOD_BUFFERED, FILE_ANY_ACCESS)
127 
128 #define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES \
129   CTL_CODE(FILE_DEVICE_VIDEO, 0x114, METHOD_BUFFERED, FILE_ANY_ACCESS)
130 
131 #define IOCTL_VIDEO_QUERY_POINTER_POSITION \
132   CTL_CODE(FILE_DEVICE_VIDEO, 0x113, METHOD_BUFFERED, FILE_ANY_ACCESS)
133 
134 #define IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES \
135   CTL_CODE(FILE_DEVICE_VIDEO, 0x118, METHOD_BUFFERED, FILE_ANY_ACCESS)
136 
137 #define IOCTL_VIDEO_RESET_DEVICE \
138   CTL_CODE(FILE_DEVICE_VIDEO, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS)
139 
140 #define IOCTL_VIDEO_RESTORE_HARDWARE_STATE \
141   CTL_CODE(FILE_DEVICE_VIDEO, 0x81, METHOD_BUFFERED, FILE_ANY_ACCESS)
142 
143 #define IOCTL_VIDEO_SAVE_HARDWARE_STATE \
144   CTL_CODE(FILE_DEVICE_VIDEO, 0x80, METHOD_BUFFERED, FILE_ANY_ACCESS)
145 
146 #define IOCTL_VIDEO_SET_CHILD_STATE_CONFIGURATION \
147   CTL_CODE(FILE_DEVICE_VIDEO, 0x122, METHOD_BUFFERED, FILE_ANY_ACCESS)
148 
149 #define IOCTL_VIDEO_SET_COLOR_REGISTERS \
150   CTL_CODE(FILE_DEVICE_VIDEO, 0x107, METHOD_BUFFERED, FILE_ANY_ACCESS)
151 
152 #define IOCTL_VIDEO_SET_CURRENT_MODE \
153   CTL_CODE(FILE_DEVICE_VIDEO, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS)
154 
155 #define IOCTL_VIDEO_SET_CURSOR_ATTR \
156   CTL_CODE(FILE_DEVICE_VIDEO, 0x10a, METHOD_BUFFERED, FILE_ANY_ACCESS)
157 
158 #define IOCTL_VIDEO_SET_CURSOR_POSITION \
159   CTL_CODE(FILE_DEVICE_VIDEO, 0x10c, METHOD_BUFFERED, FILE_ANY_ACCESS)
160 
161 #define IOCTL_VIDEO_SET_PALETTE_REGISTERS \
162   CTL_CODE(FILE_DEVICE_VIDEO, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS)
163 
164 #define IOCTL_VIDEO_SET_POINTER_ATTR \
165   CTL_CODE(FILE_DEVICE_VIDEO, 0x110, METHOD_BUFFERED, FILE_ANY_ACCESS)
166 
167 #define IOCTL_VIDEO_SET_POINTER_POSITION \
168   CTL_CODE(FILE_DEVICE_VIDEO, 0x112, METHOD_BUFFERED, FILE_ANY_ACCESS)
169 
170 #define IOCTL_VIDEO_SET_POWER_MANAGEMENT \
171   CTL_CODE(FILE_DEVICE_VIDEO, 0x11b, METHOD_BUFFERED, FILE_ANY_ACCESS)
172 
173 #define IOCTL_VIDEO_SHARE_VIDEO_MEMORY \
174   CTL_CODE(FILE_DEVICE_VIDEO, 0x11d, METHOD_BUFFERED, FILE_ANY_ACCESS)
175 
176 #define IOCTL_VIDEO_SWITCH_DUALVIEW \
177   CTL_CODE(FILE_DEVICE_VIDEO, 0x123, METHOD_BUFFERED, FILE_ANY_ACCESS)
178 
179 #define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY \
180   CTL_CODE(FILE_DEVICE_VIDEO, 0x117, METHOD_BUFFERED, FILE_ANY_ACCESS)
181 
182 #define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY \
183   CTL_CODE(FILE_DEVICE_VIDEO, 0x11e, METHOD_BUFFERED, FILE_ANY_ACCESS)
184 
185 #define IOCTL_VIDEO_SET_COLOR_LUT_DATA \
186   CTL_CODE(FILE_DEVICE_VIDEO, 0x11f, METHOD_BUFFERED, FILE_ANY_ACCESS)
187 
188 #define IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION \
189   CTL_CODE(FILE_DEVICE_VIDEO, 0x121, METHOD_BUFFERED, FILE_ANY_ACCESS)
190 
191 #define IOCTL_VIDEO_SET_BANK_POSITION \
192   CTL_CODE(FILE_DEVICE_VIDEO, 0x124, METHOD_BUFFERED, FILE_ANY_ACCESS)
193 
194 #define IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS \
195   CTL_CODE(FILE_DEVICE_VIDEO, 0x125, METHOD_BUFFERED, FILE_ANY_ACCESS)
196 
197 #define IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS \
198   CTL_CODE(FILE_DEVICE_VIDEO, 0x126, METHOD_BUFFERED, FILE_ANY_ACCESS)
199 
200 #define IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS \
201   CTL_CODE(FILE_DEVICE_VIDEO, 0x127, METHOD_BUFFERED, FILE_ANY_ACCESS)
202 
203 typedef struct _VIDEO_VDM {
204   HANDLE ProcessHandle;
205 } VIDEO_VDM, *PVIDEO_VDM;
206 
207 typedef struct _VIDEO_REGISTER_VDM {
208   ULONG MinimumStateSize;
209 } VIDEO_REGISTER_VDM, *PVIDEO_REGISTER_VDM;
210 
211 typedef struct tagVIDEO_MONITOR_DEVICE {
212   ULONG flag;
213   ULONG HwID;
214   BOOLEAN Internal;
215 } VIDEO_MONITOR_DEVICE, *PVIDEO_MONITOR_DEVICE;
216 
217 typedef struct tagVIDEO_MONITOR_DESCRIPTOR {
218   ULONG DescriptorSize;
219   UCHAR Descriptor[1];
220 } VIDEO_MONITOR_DESCRIPTOR, *PVIDEO_MONITOR_DESCRIPTOR;
221 
222 typedef enum _VIDEO_WIN32K_CALLBACKS_PARAMS_TYPE {
223   VideoPowerNotifyCallout = 1,
224   VideoDisplaySwitchCallout,
225   VideoEnumChildPdoNotifyCallout,
226   VideoFindAdapterCallout,
227   VideoWakeupCallout,
228   VideoChangeDisplaySettingsCallout,
229   VideoPnpNotifyCallout,
230   VideoDxgkDisplaySwitchCallout,
231   VideoDxgkMonitorEventCallout,
232   VideoDxgkFindAdapterTdrCallout
233 } VIDEO_WIN32K_CALLBACKS_PARAMS_TYPE;
234 
235 #define DXGK_WIN32K_PARAM_FLAG_UPDATEREGISTRY 1
236 #define DXGK_WIN32K_PARAM_FLAG_MODESWITCH 2
237 #define DXGK_WIN32K_PARAM_FLAG_DISABLEVIEW 4
238 
239 typedef struct _DXGK_WIN32K_PARAM_DATA
240 {
241   PVOID PathsArray;
242   PVOID ModesArray;
243   ULONG NumPathArrayElements;
244   ULONG NumModeArrayElements;
245   ULONG SDCFlags;
246 } DXGK_WIN32K_PARAM_DATA, *PDXGK_WIN32K_PARAM_DATA;
247 
248 typedef struct _VIDEO_WIN32K_CALLBACKS_PARAMS {
249   VIDEO_WIN32K_CALLBACKS_PARAMS_TYPE CalloutType;
250   PVOID PhysDisp;
251   ULONG_PTR Param;
252   LONG Status;
253 } VIDEO_WIN32K_CALLBACKS_PARAMS, *PVIDEO_WIN32K_CALLBACKS_PARAMS;
254 
255 typedef
256 VOID
257 (*PVIDEO_WIN32K_CALLOUT)(
258   _In_ PVOID Params);
259 
260 typedef struct _VIDEO_WIN32K_CALLBACKS {
261   IN  PVOID PhysDisp;
262   IN  PVIDEO_WIN32K_CALLOUT Callout;
263   OUT ULONG bACPI;
264   OUT HANDLE pPhysDeviceObject;
265   OUT ULONG DualviewFlags;
266 } VIDEO_WIN32K_CALLBACKS, *PVIDEO_WIN32K_CALLBACKS;
267 
268 typedef struct _VIDEO_DEVICE_SESSION_STATUS {
269   ULONG bEnable;
270   ULONG bSuccess;
271 } VIDEO_DEVICE_SESSION_STATUS, *PVIDEO_DEVICE_SESSION_STATUS;
272 
273 typedef struct _VIDEO_MEMORY {
274   PVOID RequestedVirtualAddress;
275 } VIDEO_MEMORY, *PVIDEO_MEMORY;
276 
277 typedef struct _VIDEO_MEMORY_INFORMATION {
278   PVOID  VideoRamBase;
279   ULONG  VideoRamLength;
280   PVOID  FrameBufferBase;
281   ULONG  FrameBufferLength;
282 } VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
283 
284 /* VIDEO_MODE.RequestedMode */
285 #define VIDEO_MODE_MAP_MEM_LINEAR         0x40000000
286 #define VIDEO_MODE_NO_ZERO_MEMORY         0x80000000
287 
288 typedef struct _VIDEO_MODE {
289   ULONG  RequestedMode;
290 } VIDEO_MODE, *PVIDEO_MODE;
291 
292 /* VIDEO_MODE_INFORMATION.AttributeFlags */
293 #define VIDEO_MODE_COLOR                  0x0001
294 #define VIDEO_MODE_GRAPHICS               0x0002
295 #define VIDEO_MODE_PALETTE_DRIVEN         0x0004
296 #define VIDEO_MODE_MANAGED_PALETTE        0x0008
297 #define VIDEO_MODE_INTERLACED             0x0010
298 #define VIDEO_MODE_NO_OFF_SCREEN          0x0020
299 #define VIDEO_MODE_NO_64_BIT_ACCESS       0x0040
300 #define VIDEO_MODE_BANKED                 0x0080
301 #define VIDEO_MODE_LINEAR                 0x0100
302 
303 typedef struct _VIDEO_MODE_INFORMATION {
304   ULONG  Length;
305   ULONG  ModeIndex;
306   ULONG  VisScreenWidth;
307   ULONG  VisScreenHeight;
308   ULONG  ScreenStride;
309   ULONG  NumberOfPlanes;
310   ULONG  BitsPerPlane;
311   ULONG  Frequency;
312   ULONG  XMillimeter;
313   ULONG  YMillimeter;
314   ULONG  NumberRedBits;
315   ULONG  NumberGreenBits;
316   ULONG  NumberBlueBits;
317   ULONG  RedMask;
318   ULONG  GreenMask;
319   ULONG  BlueMask;
320   ULONG  AttributeFlags;
321   ULONG  VideoMemoryBitmapWidth;
322   ULONG  VideoMemoryBitmapHeight;
323   ULONG  DriverSpecificAttributeFlags;
324 } VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION;
325 
326 typedef struct _VIDEO_NUM_MODES {
327   ULONG  NumModes;
328   ULONG  ModeInformationLength;
329 } VIDEO_NUM_MODES, *PVIDEO_NUM_MODES;
330 
331 typedef enum _VIDEO_POWER_STATE {
332   VideoPowerUnspecified = 0,
333   VideoPowerOn = 1,
334   VideoPowerStandBy,
335   VideoPowerSuspend,
336   VideoPowerOff,
337   VideoPowerHibernate,
338   VideoPowerShutdown,
339   VideoPowerMaximum
340 } VIDEO_POWER_STATE, *PVIDEO_POWER_STATE;
341 
342 typedef struct _VIDEO_POWER_MANAGEMENT {
343   ULONG  Length;
344   ULONG  DPMSVersion;
345   ULONG  PowerState;
346 } VIDEO_POWER_MANAGEMENT, *PVIDEO_POWER_MANAGEMENT;
347 
348 typedef struct _VIDEO_PUBLIC_ACCESS_RANGES {
349   ULONG  InIoSpace;
350   ULONG  MappedInIoSpace;
351   PVOID  VirtualAddress;
352 } VIDEO_PUBLIC_ACCESS_RANGES, *PVIDEO_PUBLIC_ACCESS_RANGES;
353 
354 typedef struct _VIDEO_SHARE_MEMORY {
355   HANDLE  ProcessHandle;
356   ULONG  ViewOffset;
357   ULONG  ViewSize;
358   PVOID  RequestedVirtualAddress;
359 } VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
360 
361 typedef struct _VIDEO_SHARE_MEMORY_INFORMATION {
362   ULONG  SharedViewOffset;
363   ULONG  SharedViewSize;
364   PVOID  VirtualAddress;
365 } VIDEO_SHARE_MEMORY_INFORMATION, *PVIDEO_SHARE_MEMORY_INFORMATION;
366 
367 /* VIDEO_BANK_SELECT.BankingFlags constants */
368 #define PLANAR_HC                         0x00000001
369 
370 /* VIDEO_BANK_SELECT.BankingType and PlanarHCBankingType constants */
371 typedef enum _VIDEO_BANK_TYPE {
372   VideoNotBanked = 0,
373   VideoBanked1RW,
374   VideoBanked1R1W,
375   VideoBanked2RW,
376   NumVideoBankTypes
377 } VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
378 
379 typedef struct _VIDEO_BANK_SELECT {
380   ULONG  Length;
381   ULONG  Size;
382   ULONG  BankingFlags;
383   ULONG  BankingType;
384   ULONG  PlanarHCBankingType;
385   ULONG  BitmapWidthInBytes;
386   ULONG  BitmapSize;
387   ULONG  Granularity;
388   ULONG  PlanarHCGranularity;
389   ULONG  CodeOffset;
390   ULONG  PlanarHCBankCodeOffset;
391   ULONG  PlanarHCEnableCodeOffset;
392   ULONG  PlanarHCDisableCodeOffset;
393 } VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
394 
395 typedef struct _VIDEO_LOAD_FONT_INFORMATION {
396   USHORT  WidthInPixels;
397   USHORT  HeightInPixels;
398   ULONG  FontSize;
399   UCHAR  Font[1];
400 } VIDEO_LOAD_FONT_INFORMATION, *PVIDEO_LOAD_FONT_INFORMATION;
401 
402 /* VIDEO_COLOR_CAPABILITIES.AttributeFlags constants */
403 #define VIDEO_DEVICE_COLOR                0x00000001
404 #define VIDEO_OPTIONAL_GAMMET_TABLE       0x00000002
405 
406 typedef struct _VIDEO_COLOR_CAPABILITIES {
407   ULONG  Length;
408   ULONG  AttributeFlags;
409   LONG  RedPhosphoreDecay;
410   LONG  GreenPhosphoreDecay;
411   LONG  BluePhosphoreDecay;
412   LONG  WhiteChromaticity_x;
413   LONG  WhiteChromaticity_y;
414   LONG  WhiteChromaticity_Y;
415   LONG  RedChromaticity_x;
416   LONG  RedChromaticity_y;
417   LONG  GreenChromaticity_x;
418   LONG  GreenChromaticity_y;
419   LONG  BlueChromaticity_x;
420   LONG  BlueChromaticity_y;
421   LONG  WhiteGamma;
422   LONG  RedGamma;
423   LONG  GreenGamma;
424   LONG  BlueGamma;
425 } VIDEO_COLOR_CAPABILITIES, *PVIDEO_COLOR_CAPABILITIES;
426 
427 typedef struct _VIDEO_CURSOR_ATTRIBUTES {
428   USHORT  Width;
429   USHORT  Height;
430   SHORT  Column;
431   SHORT  Row;
432   UCHAR  Rate;
433   UCHAR  Enable;
434 } VIDEO_CURSOR_ATTRIBUTES, *PVIDEO_CURSOR_ATTRIBUTES;
435 
436 typedef struct _VIDEO_CURSOR_POSITION {
437   SHORT  Column;
438   SHORT  Row;
439 } VIDEO_CURSOR_POSITION, *PVIDEO_CURSOR_POSITION;
440 
441 typedef struct _VIDEO_POINTER_ATTRIBUTES {
442   ULONG  Flags;
443   ULONG  Width;
444   ULONG  Height;
445   ULONG  WidthInBytes;
446   ULONG  Enable;
447   SHORT  Column;
448   SHORT  Row;
449   UCHAR  Pixels[1];
450 } VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES;
451 
452 /* VIDEO_POINTER_CAPABILITIES.Flags */
453 #define VIDEO_MODE_ASYNC_POINTER          0x01
454 #define VIDEO_MODE_MONO_POINTER           0x02
455 #define VIDEO_MODE_COLOR_POINTER          0x04
456 #define VIDEO_MODE_ANIMATE_START          0x08
457 #define VIDEO_MODE_ANIMATE_UPDATE         0x10
458 
459 typedef struct _VIDEO_POINTER_CAPABILITIES {
460   ULONG  Flags;
461   ULONG  MaxWidth;
462   ULONG  MaxHeight;
463   ULONG  HWPtrBitmapStart;
464   ULONG  HWPtrBitmapEnd;
465 } VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES;
466 
467 typedef struct _VIDEO_POINTER_POSITION {
468   SHORT  Column;
469   SHORT  Row;
470 } VIDEO_POINTER_POSITION, *PVIDEO_POINTER_POSITION;
471 
472 
473 /* VIDEO_HARDWARE_STATE_HEADER.VGAStateFlags constants */
474 #define VIDEO_STATE_NON_STANDARD_VGA      0x00000001
475 #define VIDEO_STATE_UNEMULATED_VGA_STATE  0x00000002
476 #define VIDEO_STATE_PACKED_CHAIN4_MODE    0x00000004
477 
478 typedef struct _VIDEO_HARDWARE_STATE_HEADER {
479   ULONG  Length;
480   UCHAR  PortValue[0x30];
481   ULONG  AttribIndexDataState;
482   ULONG  BasicSequencerOffset;
483   ULONG  BasicCrtContOffset;
484   ULONG  BasicGraphContOffset;
485   ULONG  BasicAttribContOffset;
486   ULONG  BasicDacOffset;
487   ULONG  BasicLatchesOffset;
488   ULONG  ExtendedSequencerOffset;
489   ULONG  ExtendedCrtContOffset;
490   ULONG  ExtendedGraphContOffset;
491   ULONG  ExtendedAttribContOffset;
492   ULONG  ExtendedDacOffset;
493   ULONG  ExtendedValidatorStateOffset;
494   ULONG  ExtendedMiscDataOffset;
495   ULONG  PlaneLength;
496   ULONG  Plane1Offset;
497   ULONG  Plane2Offset;
498   ULONG  Plane3Offset;
499   ULONG  Plane4Offset;
500   ULONG  VGAStateFlags;
501   ULONG  DIBOffset;
502   ULONG  DIBBitsPerPixel;
503   ULONG  DIBXResolution;
504   ULONG  DIBYResolution;
505   ULONG  DIBXlatOffset;
506   ULONG  DIBXlatLength;
507   ULONG  VesaInfoOffset;
508   PVOID  FrameBufferData;
509 } VIDEO_HARDWARE_STATE_HEADER, *PVIDEO_HARDWARE_STATE_HEADER;
510 
511 typedef struct _VIDEO_CLUTDATA {
512   UCHAR  Red;
513   UCHAR  Green;
514   UCHAR  Blue;
515   UCHAR  Unused;
516 } VIDEO_CLUTDATA, *PVIDEO_CLUTDATA;
517 
518 typedef struct {
519 	USHORT  NumEntries;
520 	USHORT  FirstEntry;
521 	union {
522     VIDEO_CLUTDATA  RgbArray;
523     ULONG  RgbLong;
524 	} LookupTable[1];
525 } VIDEO_CLUT, *PVIDEO_CLUT;
526 
527 typedef struct _VIDEO_PALETTE_DATA {
528   USHORT  NumEntries;
529   USHORT  FirstEntry;
530   USHORT  Colors[1];
531 } VIDEO_PALETTE_DATA, *PVIDEO_PALETTE_DATA;
532 
533 typedef struct _VIDEO_HARDWARE_STATE {
534 	PVIDEO_HARDWARE_STATE_HEADER  StateHeader;
535 	ULONG  StateLength;
536 } VIDEO_HARDWARE_STATE, *PVIDEO_HARDWARE_STATE;
537 
538 #define VIDEO_CHILD_ACTIVE                0x00000001
539 #define VIDEO_CHILD_DETACHED              0x00000002
540 #define VIDEO_CHILD_NOPRUNE_FREQ          0x80000000
541 #define VIDEO_CHILD_NOPRUNE_RESOLUTION    0x40000000
542 
543 #define VIDEO_DUALVIEW_REMOVABLE          0x00000001
544 #define VIDEO_DUALVIEW_PRIMARY            0x80000000
545 #define VIDEO_DUALVIEW_SECONDARY          0x40000000
546 
547 #ifndef _WINDDI_
548 typedef struct _ENG_EVENT *PEVENT;
549 #endif
550 
551 typedef struct _ENG_EVENT
552 {
553     PVOID pKEvent;
554     ULONG fFlags;
555 } ENG_EVENT, *PENG_EVENT;
556 
557 typedef struct _DISPLAY_BRIGHTNESS {
558   UCHAR ucDisplayPolicy;
559   UCHAR ucACBrightness;
560   UCHAR ucDCBrightness;
561 } DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS;
562 
563 #define DISPLAYPOLICY_AC                0x00000001
564 #define DISPLAYPOLICY_DC                0x00000002
565 #define DISPLAYPOLICY_BOTH              0x00000003
566 
567 
568 #ifdef __cplusplus
569 }
570 #endif
571 
572 #endif /* GUID_DEFS_ONLY */
573