xref: /reactos/sdk/include/psdk/ntddvdeo.h (revision b5f9e1c2)
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 #ifndef _NTDDVDEO_
24 #define _NTDDVDEO_
25 
26 #pragma once
27 
28 /*
29  * Display output interfaces
30  * {96304d9f-54b5-11d1-8b0f-00a0c9068ff3}
31  */
32 // DEFINE_GUID(GUID_DISPLAY_OUTPUT_INTERFACE_STANDARD, \/
33 //   0x96304d9f, 0x54b5, 0x11d1, 0x8b, 0x0f, 0x00, 0xa0, 0xc9, 0x06, 0x8f, 0xf3);
34 
35 /*
36  * Display adapter device interface
37  * {5b45201d-f2f2-4f3b-85bb-30ff1f953599}
38  */
39 DEFINE_GUID(GUID_DEVINTERFACE_DISPLAY_ADAPTER, \
40   0x5b45201d, 0xf2f2, 0x4f3b, 0x85, 0xbb, 0x30, 0xff, 0x1f, 0x95, 0x35, 0x99);
41 
42 /*
43  * Obsolete device interface class GUID names
44  * (use of above GUID_DEVINTERFACE_* names is recommended)
45  */
46 #define GUID_DISPLAY_ADAPTER_INTERFACE  GUID_DEVINTERFACE_DISPLAY_ADAPTER
47 
48 #if (NTDDI_VERSION >= NTDDI_VISTA)
49 
50 /*
51  * Monitor device interface
52  * {e6f07b5f-ee97-4a90-b076-33f57bf4eaa7}
53  */
54 DEFINE_GUID(GUID_DEVINTERFACE_MONITOR, \
55   0xe6f07b5f, 0xee97, 0x4a90, 0xb0, 0x76, 0x33, 0xf5, 0x7b, 0xf4, 0xea, 0xa7);
56 
57 /*
58  * Interface used by anyone listening for arrival of the display device
59  * {1ca05180-a699-450a-9a0c-de4fbe3ddd89}
60  */
61 DEFINE_GUID(GUID_DISPLAY_DEVICE_ARRIVAL, \
62   0x1ca05180, 0xa699, 0x450a, 0x9a, 0x0c, 0xde, 0x4f, 0xbe, 0x3d, 0xdd, 0x89);
63 
64 /*
65  * Interface used by anyone listening for arrival of display children
66  * {1ad9e4f0-f88d-4360-bab9-4c2d55e564cd}
67  */
68 DEFINE_GUID(GUID_DEVINTERFACE_VIDEO_OUTPUT_ARRIVAL, \
69   0x1ad9e4f0, 0xf88d, 0x4360, 0xba, 0xb9, 0x4c, 0x2d, 0x55, 0xe5, 0x64, 0xcd);
70 
71 #endif // (NTDDI_VERSION >= NTDDI_VISTA)
72 
73 #if (NTDDI_VERSION >= NTDDI_WIN10_RS1)
74 #ifdef DEFINE_DEVPROPKEY
75 
76 /*
77  * Property on a display class device's DevNode indicating
78  * that it is a indirect display.
79  */
80 DEFINE_DEVPROPKEY(DEVPKEY_IndirectDisplay, \
81   0xc50a3f10, 0xaa5c, 0x4247, 0xb8, 0x30, 0xd6, 0xa6, 0xf8, 0xea, 0xa3, 0x10, 0x01);
82 
83 struct INDIRECT_DISPLAY_INFO
84 {
85     LUID DisplayAdapterLuid;
86     ULONG Flags;
87     ULONG NumMonitors;
88     ULONG DisplayAdapterTargetBase;
89 };
90 
91 /* This indirect display device created an IddCx adapter */
92 #define INDIRECT_DISPLAY_INFO_FLAGS_CREATED_IDDCX_ADAPTER 0x01
93 
94 #endif // DEFINE_DEVPROPKEY
95 #endif // (NTDDI_VERSION >= NTDDI_WIN10_RS1)
96 
97 
98 #ifndef GUID_DEFS_ONLY
99 
100 #ifdef __cplusplus
101 extern "C" {
102 #endif
103 
104 #define VIDEO_DEVICE_NAME                 "DISPLAY%d"
105 #define WVIDEO_DEVICE_NAME                L"DISPLAY%d"
106 
107 #define DD_FULLSCREEN_VIDEO_DEVICE_NAME   L"\\Device\\FSVideo"
108 
109 
110 #define IOCTL_VIDEO_ENABLE_VDM \
111   CTL_CODE(FILE_DEVICE_VIDEO, 0x00, METHOD_BUFFERED, FILE_ANY_ACCESS)
112 
113 #define IOCTL_VIDEO_DISABLE_VDM \
114   CTL_CODE(FILE_DEVICE_VIDEO, 0x01, METHOD_BUFFERED, FILE_ANY_ACCESS)
115 
116 #define IOCTL_VIDEO_REGISTER_VDM \
117   CTL_CODE(FILE_DEVICE_VIDEO, 0x02, METHOD_BUFFERED, FILE_ANY_ACCESS)
118 
119 #define IOCTL_VIDEO_SET_OUTPUT_DEVICE_POWER_STATE \
120   CTL_CODE(FILE_DEVICE_VIDEO, 0x03, METHOD_BUFFERED, FILE_ANY_ACCESS)
121 
122 #define IOCTL_VIDEO_GET_OUTPUT_DEVICE_POWER_STATE \
123   CTL_CODE(FILE_DEVICE_VIDEO, 0x04, METHOD_BUFFERED, FILE_ANY_ACCESS)
124 
125 #define IOCTL_VIDEO_MONITOR_DEVICE \
126   CTL_CODE(FILE_DEVICE_VIDEO, 0x05, METHOD_BUFFERED, FILE_ANY_ACCESS)
127 
128 #define IOCTL_VIDEO_ENUM_MONITOR_PDO \
129   CTL_CODE(FILE_DEVICE_VIDEO, 0x06, METHOD_BUFFERED, FILE_ANY_ACCESS)
130 
131 #define IOCTL_VIDEO_INIT_WIN32K_CALLBACKS \
132   CTL_CODE(FILE_DEVICE_VIDEO, 0x07, METHOD_BUFFERED, FILE_ANY_ACCESS)
133 
134 #define IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS \
135   CTL_CODE(FILE_DEVICE_VIDEO, 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS)
136 
137 #define IOCTL_VIDEO_IS_VGA_DEVICE \
138   CTL_CODE(FILE_DEVICE_VIDEO, 0x09, METHOD_BUFFERED, FILE_ANY_ACCESS)
139 
140 #define IOCTL_VIDEO_USE_DEVICE_IN_SESSION \
141   CTL_CODE(FILE_DEVICE_VIDEO, 0x0a, METHOD_BUFFERED, FILE_ANY_ACCESS)
142 
143 #define IOCTL_VIDEO_PREPARE_FOR_EARECOVERY \
144   CTL_CODE(FILE_DEVICE_VIDEO, 0x0b, METHOD_BUFFERED, FILE_ANY_ACCESS)
145 
146 #define IOCTL_VIDEO_DISABLE_CURSOR \
147   CTL_CODE(FILE_DEVICE_VIDEO, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS)
148 
149 #define IOCTL_VIDEO_DISABLE_POINTER \
150   CTL_CODE(FILE_DEVICE_VIDEO, 0x10f, METHOD_BUFFERED, FILE_ANY_ACCESS)
151 
152 #define IOCTL_VIDEO_ENABLE_CURSOR \
153   CTL_CODE(FILE_DEVICE_VIDEO, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS)
154 
155 #define IOCTL_VIDEO_ENABLE_POINTER \
156   CTL_CODE(FILE_DEVICE_VIDEO, 0x10e, METHOD_BUFFERED, FILE_ANY_ACCESS)
157 
158 #define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES \
159   CTL_CODE(FILE_DEVICE_VIDEO, 0x119, METHOD_BUFFERED, FILE_ANY_ACCESS)
160 
161 #define IOCTL_VIDEO_GET_BANK_SELECT_CODE \
162   CTL_CODE(FILE_DEVICE_VIDEO, 0x115, METHOD_BUFFERED, FILE_ANY_ACCESS)
163 
164 #define IOCTL_VIDEO_GET_CHILD_STATE \
165   CTL_CODE(FILE_DEVICE_VIDEO, 0x120, METHOD_BUFFERED, FILE_ANY_ACCESS)
166 
167 #define IOCTL_VIDEO_GET_POWER_MANAGEMENT \
168   CTL_CODE(FILE_DEVICE_VIDEO, 0x11c, METHOD_BUFFERED, FILE_ANY_ACCESS)
169 
170 #define IOCTL_VIDEO_LOAD_AND_SET_FONT \
171   CTL_CODE(FILE_DEVICE_VIDEO, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS)
172 
173 #define IOCTL_VIDEO_MAP_VIDEO_MEMORY \
174   CTL_CODE(FILE_DEVICE_VIDEO, 0x116, METHOD_BUFFERED, FILE_ANY_ACCESS)
175 
176 #define IOCTL_VIDEO_QUERY_AVAIL_MODES \
177   CTL_CODE(FILE_DEVICE_VIDEO, 0x100, METHOD_BUFFERED, FILE_ANY_ACCESS)
178 
179 #define IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES \
180   CTL_CODE(FILE_DEVICE_VIDEO, 0x11a, METHOD_BUFFERED, FILE_ANY_ACCESS)
181 
182 #define IOCTL_VIDEO_QUERY_CURRENT_MODE \
183   CTL_CODE(FILE_DEVICE_VIDEO, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS)
184 
185 #define IOCTL_VIDEO_QUERY_CURSOR_ATTR \
186   CTL_CODE(FILE_DEVICE_VIDEO, 0x10b, METHOD_BUFFERED, FILE_ANY_ACCESS)
187 
188 #define IOCTL_VIDEO_QUERY_CURSOR_POSITION \
189   CTL_CODE(FILE_DEVICE_VIDEO, 0x10d, METHOD_BUFFERED, FILE_ANY_ACCESS)
190 
191 #define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES \
192   CTL_CODE(FILE_DEVICE_VIDEO, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS)
193 
194 #define IOCTL_VIDEO_QUERY_POINTER_ATTR \
195   CTL_CODE(FILE_DEVICE_VIDEO, 0x111, METHOD_BUFFERED, FILE_ANY_ACCESS)
196 
197 #define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES \
198   CTL_CODE(FILE_DEVICE_VIDEO, 0x114, METHOD_BUFFERED, FILE_ANY_ACCESS)
199 
200 #define IOCTL_VIDEO_QUERY_POINTER_POSITION \
201   CTL_CODE(FILE_DEVICE_VIDEO, 0x113, METHOD_BUFFERED, FILE_ANY_ACCESS)
202 
203 #define IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES \
204   CTL_CODE(FILE_DEVICE_VIDEO, 0x118, METHOD_BUFFERED, FILE_ANY_ACCESS)
205 
206 #define IOCTL_VIDEO_RESET_DEVICE \
207   CTL_CODE(FILE_DEVICE_VIDEO, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS)
208 
209 #define IOCTL_VIDEO_RESTORE_HARDWARE_STATE \
210   CTL_CODE(FILE_DEVICE_VIDEO, 0x81, METHOD_BUFFERED, FILE_ANY_ACCESS)
211 
212 #define IOCTL_VIDEO_SAVE_HARDWARE_STATE \
213   CTL_CODE(FILE_DEVICE_VIDEO, 0x80, METHOD_BUFFERED, FILE_ANY_ACCESS)
214 
215 #define IOCTL_VIDEO_SET_CHILD_STATE_CONFIGURATION \
216   CTL_CODE(FILE_DEVICE_VIDEO, 0x122, METHOD_BUFFERED, FILE_ANY_ACCESS)
217 
218 #define IOCTL_VIDEO_SET_COLOR_REGISTERS \
219   CTL_CODE(FILE_DEVICE_VIDEO, 0x107, METHOD_BUFFERED, FILE_ANY_ACCESS)
220 
221 #define IOCTL_VIDEO_SET_CURRENT_MODE \
222   CTL_CODE(FILE_DEVICE_VIDEO, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS)
223 
224 #define IOCTL_VIDEO_SET_CURSOR_ATTR \
225   CTL_CODE(FILE_DEVICE_VIDEO, 0x10a, METHOD_BUFFERED, FILE_ANY_ACCESS)
226 
227 #define IOCTL_VIDEO_SET_CURSOR_POSITION \
228   CTL_CODE(FILE_DEVICE_VIDEO, 0x10c, METHOD_BUFFERED, FILE_ANY_ACCESS)
229 
230 #define IOCTL_VIDEO_SET_PALETTE_REGISTERS \
231   CTL_CODE(FILE_DEVICE_VIDEO, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS)
232 
233 #define IOCTL_VIDEO_SET_POINTER_ATTR \
234   CTL_CODE(FILE_DEVICE_VIDEO, 0x110, METHOD_BUFFERED, FILE_ANY_ACCESS)
235 
236 #define IOCTL_VIDEO_SET_POINTER_POSITION \
237   CTL_CODE(FILE_DEVICE_VIDEO, 0x112, METHOD_BUFFERED, FILE_ANY_ACCESS)
238 
239 #define IOCTL_VIDEO_SET_POWER_MANAGEMENT \
240   CTL_CODE(FILE_DEVICE_VIDEO, 0x11b, METHOD_BUFFERED, FILE_ANY_ACCESS)
241 
242 #define IOCTL_VIDEO_SHARE_VIDEO_MEMORY \
243   CTL_CODE(FILE_DEVICE_VIDEO, 0x11d, METHOD_BUFFERED, FILE_ANY_ACCESS)
244 
245 #define IOCTL_VIDEO_SWITCH_DUALVIEW \
246   CTL_CODE(FILE_DEVICE_VIDEO, 0x123, METHOD_BUFFERED, FILE_ANY_ACCESS)
247 
248 #define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY \
249   CTL_CODE(FILE_DEVICE_VIDEO, 0x117, METHOD_BUFFERED, FILE_ANY_ACCESS)
250 
251 #define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY \
252   CTL_CODE(FILE_DEVICE_VIDEO, 0x11e, METHOD_BUFFERED, FILE_ANY_ACCESS)
253 
254 #define IOCTL_VIDEO_SET_COLOR_LUT_DATA \
255   CTL_CODE(FILE_DEVICE_VIDEO, 0x11f, METHOD_BUFFERED, FILE_ANY_ACCESS)
256 
257 #define IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION \
258   CTL_CODE(FILE_DEVICE_VIDEO, 0x121, METHOD_BUFFERED, FILE_ANY_ACCESS)
259 
260 #define IOCTL_VIDEO_SET_BANK_POSITION \
261   CTL_CODE(FILE_DEVICE_VIDEO, 0x124, METHOD_BUFFERED, FILE_ANY_ACCESS)
262 
263 #define IOCTL_VIDEO_QUERY_SUPPORTED_BRIGHTNESS \
264   CTL_CODE(FILE_DEVICE_VIDEO, 0x125, METHOD_BUFFERED, FILE_ANY_ACCESS)
265 
266 #define IOCTL_VIDEO_QUERY_DISPLAY_BRIGHTNESS \
267   CTL_CODE(FILE_DEVICE_VIDEO, 0x126, METHOD_BUFFERED, FILE_ANY_ACCESS)
268 
269 #define IOCTL_VIDEO_SET_DISPLAY_BRIGHTNESS \
270   CTL_CODE(FILE_DEVICE_VIDEO, 0x127, METHOD_BUFFERED, FILE_ANY_ACCESS)
271 
272 typedef struct _VIDEO_VDM {
273   HANDLE ProcessHandle;
274 } VIDEO_VDM, *PVIDEO_VDM;
275 
276 typedef struct _VIDEO_REGISTER_VDM {
277   ULONG MinimumStateSize;
278 } VIDEO_REGISTER_VDM, *PVIDEO_REGISTER_VDM;
279 
280 typedef struct tagVIDEO_MONITOR_DEVICE {
281   ULONG flag;
282   HANDLE pdo;
283   ULONG HwID;
284   BOOLEAN Internal;
285 } VIDEO_MONITOR_DEVICE, *PVIDEO_MONITOR_DEVICE;
286 
287 typedef struct tagVIDEO_MONITOR_DESCRIPTOR {
288   ULONG DescriptorSize;
289   UCHAR Descriptor[1];
290 } VIDEO_MONITOR_DESCRIPTOR, *PVIDEO_MONITOR_DESCRIPTOR;
291 
292 typedef enum _VIDEO_WIN32K_CALLBACKS_PARAMS_TYPE {
293   VideoPowerNotifyCallout = 1,
294   VideoDisplaySwitchCallout,
295   VideoEnumChildPdoNotifyCallout,
296   VideoFindAdapterCallout,
297   VideoWakeupCallout,
298   VideoChangeDisplaySettingsCallout,
299   VideoPnpNotifyCallout,
300   VideoDxgkDisplaySwitchCallout,
301   VideoDxgkMonitorEventCallout,
302   VideoDxgkFindAdapterTdrCallout
303 } VIDEO_WIN32K_CALLBACKS_PARAMS_TYPE;
304 
305 #define DXGK_WIN32K_PARAM_FLAG_UPDATEREGISTRY 1
306 #define DXGK_WIN32K_PARAM_FLAG_MODESWITCH 2
307 #define DXGK_WIN32K_PARAM_FLAG_DISABLEVIEW 4
308 
309 typedef struct _DXGK_WIN32K_PARAM_DATA
310 {
311   PVOID PathsArray;
312   PVOID ModesArray;
313   ULONG NumPathArrayElements;
314   ULONG NumModeArrayElements;
315   ULONG SDCFlags;
316 } DXGK_WIN32K_PARAM_DATA, *PDXGK_WIN32K_PARAM_DATA;
317 
318 typedef struct _VIDEO_WIN32K_CALLBACKS_PARAMS {
319   VIDEO_WIN32K_CALLBACKS_PARAMS_TYPE CalloutType;
320   PVOID PhysDisp;
321   ULONG_PTR Param;
322   LONG Status;
323 } VIDEO_WIN32K_CALLBACKS_PARAMS, *PVIDEO_WIN32K_CALLBACKS_PARAMS;
324 
325 typedef
326 VOID
327 (NTAPI *PVIDEO_WIN32K_CALLOUT)(
328   _In_ PVOID Params);
329 
330 typedef struct _VIDEO_WIN32K_CALLBACKS {
331   IN  PVOID PhysDisp;
332   IN  PVIDEO_WIN32K_CALLOUT Callout;
333   OUT ULONG bACPI;
334   OUT HANDLE pPhysDeviceObject;
335   OUT ULONG DualviewFlags;
336 } VIDEO_WIN32K_CALLBACKS, *PVIDEO_WIN32K_CALLBACKS;
337 
338 typedef struct _VIDEO_DEVICE_SESSION_STATUS {
339   ULONG bEnable;
340   ULONG bSuccess;
341 } VIDEO_DEVICE_SESSION_STATUS, *PVIDEO_DEVICE_SESSION_STATUS;
342 
343 typedef struct _VIDEO_MEMORY {
344   PVOID RequestedVirtualAddress;
345 } VIDEO_MEMORY, *PVIDEO_MEMORY;
346 
347 typedef struct _VIDEO_MEMORY_INFORMATION {
348   PVOID  VideoRamBase;
349   ULONG  VideoRamLength;
350   PVOID  FrameBufferBase;
351   ULONG  FrameBufferLength;
352 } VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
353 
354 /* VIDEO_MODE.RequestedMode */
355 #define VIDEO_MODE_MAP_MEM_LINEAR         0x40000000
356 #define VIDEO_MODE_NO_ZERO_MEMORY         0x80000000
357 
358 typedef struct _VIDEO_MODE {
359   ULONG  RequestedMode;
360 } VIDEO_MODE, *PVIDEO_MODE;
361 
362 /* VIDEO_MODE_INFORMATION.AttributeFlags */
363 #define VIDEO_MODE_COLOR                  0x0001
364 #define VIDEO_MODE_GRAPHICS               0x0002
365 #define VIDEO_MODE_PALETTE_DRIVEN         0x0004
366 #define VIDEO_MODE_MANAGED_PALETTE        0x0008
367 #define VIDEO_MODE_INTERLACED             0x0010
368 #define VIDEO_MODE_NO_OFF_SCREEN          0x0020
369 #define VIDEO_MODE_NO_64_BIT_ACCESS       0x0040
370 #define VIDEO_MODE_BANKED                 0x0080
371 #define VIDEO_MODE_LINEAR                 0x0100
372 
373 typedef struct _VIDEO_MODE_INFORMATION {
374   ULONG  Length;
375   ULONG  ModeIndex;
376   ULONG  VisScreenWidth;
377   ULONG  VisScreenHeight;
378   ULONG  ScreenStride;
379   ULONG  NumberOfPlanes;
380   ULONG  BitsPerPlane;
381   ULONG  Frequency;
382   ULONG  XMillimeter;
383   ULONG  YMillimeter;
384   ULONG  NumberRedBits;
385   ULONG  NumberGreenBits;
386   ULONG  NumberBlueBits;
387   ULONG  RedMask;
388   ULONG  GreenMask;
389   ULONG  BlueMask;
390   ULONG  AttributeFlags;
391   ULONG  VideoMemoryBitmapWidth;
392   ULONG  VideoMemoryBitmapHeight;
393   ULONG  DriverSpecificAttributeFlags;
394 } VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION;
395 
396 typedef struct _VIDEO_NUM_MODES {
397   ULONG  NumModes;
398   ULONG  ModeInformationLength;
399 } VIDEO_NUM_MODES, *PVIDEO_NUM_MODES;
400 
401 typedef enum _VIDEO_POWER_STATE {
402   VideoPowerUnspecified = 0,
403   VideoPowerOn = 1,
404   VideoPowerStandBy,
405   VideoPowerSuspend,
406   VideoPowerOff,
407   VideoPowerHibernate,
408   VideoPowerShutdown,
409   VideoPowerMaximum
410 } VIDEO_POWER_STATE, *PVIDEO_POWER_STATE;
411 
412 typedef struct _VIDEO_POWER_MANAGEMENT {
413   ULONG  Length;
414   ULONG  DPMSVersion;
415   ULONG  PowerState;
416 } VIDEO_POWER_MANAGEMENT, *PVIDEO_POWER_MANAGEMENT;
417 
418 typedef struct _VIDEO_PUBLIC_ACCESS_RANGES {
419   ULONG  InIoSpace;
420   ULONG  MappedInIoSpace;
421   PVOID  VirtualAddress;
422 } VIDEO_PUBLIC_ACCESS_RANGES, *PVIDEO_PUBLIC_ACCESS_RANGES;
423 
424 typedef struct _VIDEO_SHARE_MEMORY {
425   HANDLE  ProcessHandle;
426   ULONG  ViewOffset;
427   ULONG  ViewSize;
428   PVOID  RequestedVirtualAddress;
429 } VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
430 
431 typedef struct _VIDEO_SHARE_MEMORY_INFORMATION {
432   ULONG  SharedViewOffset;
433   ULONG  SharedViewSize;
434   PVOID  VirtualAddress;
435 } VIDEO_SHARE_MEMORY_INFORMATION, *PVIDEO_SHARE_MEMORY_INFORMATION;
436 
437 /* VIDEO_BANK_SELECT.BankingFlags constants */
438 #define PLANAR_HC                         0x00000001
439 
440 /* VIDEO_BANK_SELECT.BankingType and PlanarHCBankingType constants */
441 typedef enum _VIDEO_BANK_TYPE {
442   VideoNotBanked = 0,
443   VideoBanked1RW,
444   VideoBanked1R1W,
445   VideoBanked2RW,
446   NumVideoBankTypes
447 } VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
448 
449 typedef struct _VIDEO_BANK_SELECT {
450   ULONG  Length;
451   ULONG  Size;
452   ULONG  BankingFlags;
453   ULONG  BankingType;
454   ULONG  PlanarHCBankingType;
455   ULONG  BitmapWidthInBytes;
456   ULONG  BitmapSize;
457   ULONG  Granularity;
458   ULONG  PlanarHCGranularity;
459   ULONG  CodeOffset;
460   ULONG  PlanarHCBankCodeOffset;
461   ULONG  PlanarHCEnableCodeOffset;
462   ULONG  PlanarHCDisableCodeOffset;
463 } VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
464 
465 typedef struct _VIDEO_LOAD_FONT_INFORMATION {
466   USHORT  WidthInPixels;
467   USHORT  HeightInPixels;
468   ULONG  FontSize;
469   UCHAR  Font[1];
470 } VIDEO_LOAD_FONT_INFORMATION, *PVIDEO_LOAD_FONT_INFORMATION;
471 
472 /* VIDEO_COLOR_CAPABILITIES.AttributeFlags constants */
473 #define VIDEO_DEVICE_COLOR                0x00000001
474 #define VIDEO_OPTIONAL_GAMMET_TABLE       0x00000002
475 
476 typedef struct _VIDEO_COLOR_CAPABILITIES {
477   ULONG  Length;
478   ULONG  AttributeFlags;
479   LONG  RedPhosphoreDecay;
480   LONG  GreenPhosphoreDecay;
481   LONG  BluePhosphoreDecay;
482   LONG  WhiteChromaticity_x;
483   LONG  WhiteChromaticity_y;
484   LONG  WhiteChromaticity_Y;
485   LONG  RedChromaticity_x;
486   LONG  RedChromaticity_y;
487   LONG  GreenChromaticity_x;
488   LONG  GreenChromaticity_y;
489   LONG  BlueChromaticity_x;
490   LONG  BlueChromaticity_y;
491   LONG  WhiteGamma;
492   LONG  RedGamma;
493   LONG  GreenGamma;
494   LONG  BlueGamma;
495 } VIDEO_COLOR_CAPABILITIES, *PVIDEO_COLOR_CAPABILITIES;
496 
497 typedef struct _VIDEO_CURSOR_ATTRIBUTES {
498   USHORT  Width;
499   USHORT  Height;
500   SHORT  Column;
501   SHORT  Row;
502   UCHAR  Rate;
503   UCHAR  Enable;
504 } VIDEO_CURSOR_ATTRIBUTES, *PVIDEO_CURSOR_ATTRIBUTES;
505 
506 typedef struct _VIDEO_CURSOR_POSITION {
507   SHORT  Column;
508   SHORT  Row;
509 } VIDEO_CURSOR_POSITION, *PVIDEO_CURSOR_POSITION;
510 
511 typedef struct _VIDEO_POINTER_ATTRIBUTES {
512   ULONG  Flags;
513   ULONG  Width;
514   ULONG  Height;
515   ULONG  WidthInBytes;
516   ULONG  Enable;
517   SHORT  Column;
518   SHORT  Row;
519   UCHAR  Pixels[1];
520 } VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES;
521 
522 /* VIDEO_POINTER_CAPABILITIES.Flags */
523 #define VIDEO_MODE_ASYNC_POINTER          0x01
524 #define VIDEO_MODE_MONO_POINTER           0x02
525 #define VIDEO_MODE_COLOR_POINTER          0x04
526 #define VIDEO_MODE_ANIMATE_START          0x08
527 #define VIDEO_MODE_ANIMATE_UPDATE         0x10
528 
529 typedef struct _VIDEO_POINTER_CAPABILITIES {
530   ULONG  Flags;
531   ULONG  MaxWidth;
532   ULONG  MaxHeight;
533   ULONG  HWPtrBitmapStart;
534   ULONG  HWPtrBitmapEnd;
535 } VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES;
536 
537 typedef struct _VIDEO_POINTER_POSITION {
538   SHORT  Column;
539   SHORT  Row;
540 } VIDEO_POINTER_POSITION, *PVIDEO_POINTER_POSITION;
541 
542 
543 /* VIDEO_HARDWARE_STATE_HEADER.VGAStateFlags constants */
544 #define VIDEO_STATE_NON_STANDARD_VGA      0x00000001
545 #define VIDEO_STATE_UNEMULATED_VGA_STATE  0x00000002
546 #define VIDEO_STATE_PACKED_CHAIN4_MODE    0x00000004
547 
548 typedef struct _VIDEO_HARDWARE_STATE_HEADER {
549   ULONG  Length;
550   UCHAR  PortValue[0x30];
551   ULONG  AttribIndexDataState;
552   ULONG  BasicSequencerOffset;
553   ULONG  BasicCrtContOffset;
554   ULONG  BasicGraphContOffset;
555   ULONG  BasicAttribContOffset;
556   ULONG  BasicDacOffset;
557   ULONG  BasicLatchesOffset;
558   ULONG  ExtendedSequencerOffset;
559   ULONG  ExtendedCrtContOffset;
560   ULONG  ExtendedGraphContOffset;
561   ULONG  ExtendedAttribContOffset;
562   ULONG  ExtendedDacOffset;
563   ULONG  ExtendedValidatorStateOffset;
564   ULONG  ExtendedMiscDataOffset;
565   ULONG  PlaneLength;
566   ULONG  Plane1Offset;
567   ULONG  Plane2Offset;
568   ULONG  Plane3Offset;
569   ULONG  Plane4Offset;
570   ULONG  VGAStateFlags;
571   ULONG  DIBOffset;
572   ULONG  DIBBitsPerPixel;
573   ULONG  DIBXResolution;
574   ULONG  DIBYResolution;
575   ULONG  DIBXlatOffset;
576   ULONG  DIBXlatLength;
577   ULONG  VesaInfoOffset;
578   PVOID  FrameBufferData;
579 } VIDEO_HARDWARE_STATE_HEADER, *PVIDEO_HARDWARE_STATE_HEADER;
580 
581 typedef struct _VIDEO_CLUTDATA {
582   UCHAR  Red;
583   UCHAR  Green;
584   UCHAR  Blue;
585   UCHAR  Unused;
586 } VIDEO_CLUTDATA, *PVIDEO_CLUTDATA;
587 
588 typedef struct {
589 	USHORT  NumEntries;
590 	USHORT  FirstEntry;
591 	union {
592     VIDEO_CLUTDATA  RgbArray;
593     ULONG  RgbLong;
594 	} LookupTable[1];
595 } VIDEO_CLUT, *PVIDEO_CLUT;
596 
597 typedef struct _VIDEO_PALETTE_DATA {
598   USHORT  NumEntries;
599   USHORT  FirstEntry;
600   USHORT  Colors[1];
601 } VIDEO_PALETTE_DATA, *PVIDEO_PALETTE_DATA;
602 
603 typedef struct _VIDEO_HARDWARE_STATE {
604 	PVIDEO_HARDWARE_STATE_HEADER  StateHeader;
605 	ULONG  StateLength;
606 } VIDEO_HARDWARE_STATE, *PVIDEO_HARDWARE_STATE;
607 
608 #define VIDEO_CHILD_ACTIVE                0x00000001
609 #define VIDEO_CHILD_DETACHED              0x00000002
610 #define VIDEO_CHILD_NOPRUNE_FREQ          0x80000000
611 #define VIDEO_CHILD_NOPRUNE_RESOLUTION    0x40000000
612 
613 #define VIDEO_DUALVIEW_REMOVABLE          0x00000001
614 #define VIDEO_DUALVIEW_PRIMARY            0x80000000
615 #define VIDEO_DUALVIEW_SECONDARY          0x40000000
616 
617 #ifndef _WINDDI_
618 typedef struct _ENG_EVENT *PEVENT;
619 #endif
620 
621 typedef struct _ENG_EVENT
622 {
623     PVOID pKEvent;
624     ULONG fFlags;
625 } ENG_EVENT, *PENG_EVENT;
626 
627 typedef struct _DISPLAY_BRIGHTNESS {
628   UCHAR ucDisplayPolicy;
629   UCHAR ucACBrightness;
630   UCHAR ucDCBrightness;
631 } DISPLAY_BRIGHTNESS, *PDISPLAY_BRIGHTNESS;
632 
633 #define DISPLAYPOLICY_AC                0x00000001
634 #define DISPLAYPOLICY_DC                0x00000002
635 #define DISPLAYPOLICY_BOTH              0x00000003
636 
637 
638 #ifdef __cplusplus
639 }
640 #endif
641 
642 #endif /* !GUID_DEFS_ONLY */
643 
644 #endif /* _NTDDVDEO_ */
645