- Fix KiDispatchException to unmask KI_EXCEPTION_INTERNAL when setting the exception...
[reactos.git] / reactos / include / ddk / ntddvdeo.h
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_H
24 #define __NTDDVDEO_H
25
26 #if __GNUC__ >=3
27 #pragma GCC system_header
28 #endif
29
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33
34 #define VIDEO_DEVICE_NAME "DISPLAY%d"
35 #define WVIDEO_DEVICE_NAME L"DISPLAY%d"
36
37 #define DD_FULLSCREEN_VIDEO_DEVICE_NAME L"\\Device\\FSVideo"
38
39 DEFINE_GUID(GUID_DEVINTERFACE_DISPLAY_ADAPTER, \
40 0x5b45201d, 0xf2f2, 0x4f3b, 0x85, 0xbb, 0x30, 0xff, 0x1f, 0x95, 0x35, 0x99);
41
42
43 #define IOCTL_VIDEO_DISABLE_CURSOR \
44 CTL_CODE (FILE_DEVICE_VIDEO, 0x109, METHOD_BUFFERED, FILE_ANY_ACCESS)
45
46 #define IOCTL_VIDEO_DISABLE_POINTER \
47 CTL_CODE(FILE_DEVICE_VIDEO, 0x10f, METHOD_BUFFERED, FILE_ANY_ACCESS)
48
49 #define IOCTL_VIDEO_ENABLE_CURSOR \
50 CTL_CODE(FILE_DEVICE_VIDEO, 0x108, METHOD_BUFFERED, FILE_ANY_ACCESS)
51
52 #define IOCTL_VIDEO_ENABLE_POINTER \
53 CTL_CODE(FILE_DEVICE_VIDEO, 0x10e, METHOD_BUFFERED, FILE_ANY_ACCESS)
54
55 #define IOCTL_VIDEO_FREE_PUBLIC_ACCESS_RANGES \
56 CTL_CODE(FILE_DEVICE_VIDEO, 0x119, METHOD_BUFFERED, FILE_ANY_ACCESS)
57
58 #define IOCTL_VIDEO_GET_BANK_SELECT_CODE \
59 CTL_CODE(FILE_DEVICE_VIDEO, 0x115, METHOD_BUFFERED, FILE_ANY_ACCESS)
60
61 #define IOCTL_VIDEO_GET_CHILD_STATE \
62 CTL_CODE(FILE_DEVICE_VIDEO, 0x120, METHOD_BUFFERED, FILE_ANY_ACCESS)
63
64 #define IOCTL_VIDEO_GET_POWER_MANAGEMENT \
65 CTL_CODE(FILE_DEVICE_VIDEO, 0x11c, METHOD_BUFFERED, FILE_ANY_ACCESS)
66
67 #define IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS \
68 CTL_CODE(FILE_DEVICE_VIDEO, 0x08, METHOD_BUFFERED, FILE_ANY_ACCESS)
69
70 #define IOCTL_VIDEO_LOAD_AND_SET_FONT \
71 CTL_CODE(FILE_DEVICE_VIDEO, 0x105, METHOD_BUFFERED, FILE_ANY_ACCESS)
72
73 #define IOCTL_VIDEO_MAP_VIDEO_MEMORY \
74 CTL_CODE(FILE_DEVICE_VIDEO, 0x116, METHOD_BUFFERED, FILE_ANY_ACCESS)
75
76 #define IOCTL_VIDEO_QUERY_AVAIL_MODES \
77 CTL_CODE(FILE_DEVICE_VIDEO, 0x100, METHOD_BUFFERED, FILE_ANY_ACCESS)
78
79 #define IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES \
80 CTL_CODE(FILE_DEVICE_VIDEO, 0x11a, METHOD_BUFFERED, FILE_ANY_ACCESS)
81
82 #define IOCTL_VIDEO_QUERY_CURRENT_MODE \
83 CTL_CODE(FILE_DEVICE_VIDEO, 0x102, METHOD_BUFFERED, FILE_ANY_ACCESS)
84
85 #define IOCTL_VIDEO_QUERY_CURSOR_ATTR \
86 CTL_CODE(FILE_DEVICE_VIDEO, 0x10b, METHOD_BUFFERED, FILE_ANY_ACCESS)
87
88 #define IOCTL_VIDEO_QUERY_CURSOR_POSITION \
89 CTL_CODE(FILE_DEVICE_VIDEO, 0x10d, METHOD_BUFFERED, FILE_ANY_ACCESS)
90
91 #define IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES \
92 CTL_CODE(FILE_DEVICE_VIDEO, 0x101, METHOD_BUFFERED, FILE_ANY_ACCESS)
93
94 #define IOCTL_VIDEO_QUERY_POINTER_ATTR \
95 CTL_CODE(FILE_DEVICE_VIDEO, 0x111, METHOD_BUFFERED, FILE_ANY_ACCESS)
96
97 #define IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES \
98 CTL_CODE(FILE_DEVICE_VIDEO, 0x114, METHOD_BUFFERED, FILE_ANY_ACCESS)
99
100 #define IOCTL_VIDEO_QUERY_POINTER_POSITION \
101 CTL_CODE(FILE_DEVICE_VIDEO, 0x113, METHOD_BUFFERED, FILE_ANY_ACCESS)
102
103 #define IOCTL_VIDEO_QUERY_PUBLIC_ACCESS_RANGES \
104 CTL_CODE(FILE_DEVICE_VIDEO, 0x118, METHOD_BUFFERED, FILE_ANY_ACCESS)
105
106 #define IOCTL_VIDEO_RESET_DEVICE \
107 CTL_CODE(FILE_DEVICE_VIDEO, 0x104, METHOD_BUFFERED, FILE_ANY_ACCESS)
108
109 #define IOCTL_VIDEO_RESTORE_HARDWARE_STATE \
110 CTL_CODE(FILE_DEVICE_VIDEO, 0x81, METHOD_BUFFERED, FILE_ANY_ACCESS)
111
112 #define IOCTL_VIDEO_SAVE_HARDWARE_STATE \
113 CTL_CODE(FILE_DEVICE_VIDEO, 0x80, METHOD_BUFFERED, FILE_ANY_ACCESS)
114
115 #define IOCTL_VIDEO_SET_CHILD_STATE_CONFIGURATION \
116 CTL_CODE(FILE_DEVICE_VIDEO, 0x122, METHOD_BUFFERED, FILE_ANY_ACCESS)
117
118 #define IOCTL_VIDEO_SET_COLOR_REGISTERS \
119 CTL_CODE(FILE_DEVICE_VIDEO, 0x107, METHOD_BUFFERED, FILE_ANY_ACCESS)
120
121 #define IOCTL_VIDEO_SET_CURRENT_MODE \
122 CTL_CODE(FILE_DEVICE_VIDEO, 0x103, METHOD_BUFFERED, FILE_ANY_ACCESS)
123
124 #define IOCTL_VIDEO_SET_CURSOR_ATTR \
125 CTL_CODE(FILE_DEVICE_VIDEO, 0x10a, METHOD_BUFFERED, FILE_ANY_ACCESS)
126
127 #define IOCTL_VIDEO_SET_CURSOR_POSITION \
128 CTL_CODE(FILE_DEVICE_VIDEO, 0x10c, METHOD_BUFFERED, FILE_ANY_ACCESS)
129
130 #define IOCTL_VIDEO_SET_PALETTE_REGISTERS \
131 CTL_CODE(FILE_DEVICE_VIDEO, 0x106, METHOD_BUFFERED, FILE_ANY_ACCESS)
132
133 #define IOCTL_VIDEO_SET_POINTER_ATTR \
134 CTL_CODE(FILE_DEVICE_VIDEO, 0x110, METHOD_BUFFERED, FILE_ANY_ACCESS)
135
136 #define IOCTL_VIDEO_SET_POINTER_POSITION \
137 CTL_CODE(FILE_DEVICE_VIDEO, 0x112, METHOD_BUFFERED, FILE_ANY_ACCESS)
138
139 #define IOCTL_VIDEO_SET_POWER_MANAGEMENT \
140 CTL_CODE(FILE_DEVICE_VIDEO, 0x11b, METHOD_BUFFERED, FILE_ANY_ACCESS)
141
142 #define IOCTL_VIDEO_SHARE_VIDEO_MEMORY \
143 CTL_CODE(FILE_DEVICE_VIDEO, 0x11d, METHOD_BUFFERED, FILE_ANY_ACCESS)
144
145 #define IOCTL_VIDEO_SWITCH_DUALVIEW \
146 CTL_CODE(FILE_DEVICE_VIDEO, 0x123, METHOD_BUFFERED, FILE_ANY_ACCESS)
147
148 #define IOCTL_VIDEO_UNMAP_VIDEO_MEMORY \
149 CTL_CODE(FILE_DEVICE_VIDEO, 0x117, METHOD_BUFFERED, FILE_ANY_ACCESS)
150
151 #define IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY \
152 CTL_CODE(FILE_DEVICE_VIDEO, 0x11e, METHOD_BUFFERED, FILE_ANY_ACCESS)
153
154 #define IOCTL_VIDEO_VALIDATE_CHILD_STATE_CONFIGURATION \
155 CTL_CODE(FILE_DEVICE_VIDEO, 0x121, METHOD_BUFFERED, FILE_ANY_ACCESS)
156
157
158
159 typedef struct _VIDEO_MEMORY {
160 PVOID RequestedVirtualAddress;
161 } VIDEO_MEMORY, *PVIDEO_MEMORY;
162
163 typedef struct _VIDEO_MEMORY_INFORMATION {
164 PVOID VideoRamBase;
165 ULONG VideoRamLength;
166 PVOID FrameBufferBase;
167 ULONG FrameBufferLength;
168 } VIDEO_MEMORY_INFORMATION, *PVIDEO_MEMORY_INFORMATION;
169
170 /* VIDEO_MODE.RequestedMode */
171 #define VIDEO_MODE_MAP_MEM_LINEAR 0x40000000
172 #define VIDEO_MODE_NO_ZERO_MEMORY 0x80000000
173
174 typedef struct _VIDEO_MODE {
175 ULONG RequestedMode;
176 } VIDEO_MODE, *PVIDEO_MODE;
177
178 /* VIDEO_MODE_INFORMATION.AttributeFlags */
179 #define VIDEO_MODE_COLOR 0x0001
180 #define VIDEO_MODE_GRAPHICS 0x0002
181 #define VIDEO_MODE_PALETTE_DRIVEN 0x0004
182 #define VIDEO_MODE_MANAGED_PALETTE 0x0008
183 #define VIDEO_MODE_INTERLACED 0x0010
184 #define VIDEO_MODE_NO_OFF_SCREEN 0x0020
185 #define VIDEO_MODE_NO_64_BIT_ACCESS 0x0040
186 #define VIDEO_MODE_BANKED 0x0080
187 #define VIDEO_MODE_LINEAR 0x0100
188
189 typedef struct _VIDEO_MODE_INFORMATION {
190 ULONG Length;
191 ULONG ModeIndex;
192 ULONG VisScreenWidth;
193 ULONG VisScreenHeight;
194 ULONG ScreenStride;
195 ULONG NumberOfPlanes;
196 ULONG BitsPerPlane;
197 ULONG Frequency;
198 ULONG XMillimeter;
199 ULONG YMillimeter;
200 ULONG NumberRedBits;
201 ULONG NumberGreenBits;
202 ULONG NumberBlueBits;
203 ULONG RedMask;
204 ULONG GreenMask;
205 ULONG BlueMask;
206 ULONG AttributeFlags;
207 ULONG VideoMemoryBitmapWidth;
208 ULONG VideoMemoryBitmapHeight;
209 ULONG DriverSpecificAttributeFlags;
210 } VIDEO_MODE_INFORMATION, *PVIDEO_MODE_INFORMATION;
211
212 typedef struct _VIDEO_NUM_MODES {
213 ULONG NumModes;
214 ULONG ModeInformationLength;
215 } VIDEO_NUM_MODES, *PVIDEO_NUM_MODES;
216
217 typedef enum _VIDEO_POWER_STATE {
218 VideoPowerUnspecified = 0,
219 VideoPowerOn = 1,
220 VideoPowerStandBy,
221 VideoPowerSuspend,
222 VideoPowerOff,
223 VideoPowerHibernate,
224 VideoPowerShutdown,
225 VideoPowerMaximum
226 } VIDEO_POWER_STATE, *PVIDEO_POWER_STATE;
227
228 typedef struct _VIDEO_POWER_MANAGEMENT {
229 ULONG Length;
230 ULONG DPMSVersion;
231 ULONG PowerState;
232 } VIDEO_POWER_MANAGEMENT, *PVIDEO_POWER_MANAGEMENT;
233
234 typedef struct _VIDEO_PUBLIC_ACCESS_RANGES {
235 ULONG InIoSpace;
236 ULONG MappedInIoSpace;
237 PVOID VirtualAddress;
238 } VIDEO_PUBLIC_ACCESS_RANGES, *PVIDEO_PUBLIC_ACCESS_RANGES;
239
240 typedef struct _VIDEO_SHARE_MEMORY {
241 HANDLE ProcessHandle;
242 ULONG ViewOffset;
243 ULONG ViewSize;
244 PVOID RequestedVirtualAddress;
245 } VIDEO_SHARE_MEMORY, *PVIDEO_SHARE_MEMORY;
246
247 typedef struct _VIDEO_SHARE_MEMORY_INFORMATION {
248 ULONG SharedViewOffset;
249 ULONG SharedViewSize;
250 PVOID VirtualAddress;
251 } VIDEO_SHARE_MEMORY_INFORMATION, *PVIDEO_SHARE_MEMORY_INFORMATION;
252
253 /* VIDEO_BANK_SELECT.BankingFlags constants */
254 #define PLANAR_HC 0x00000001
255
256 /* VIDEO_BANK_SELECT.BankingType and PlanarHCBankingType constants */
257 typedef enum _VIDEO_BANK_TYPE {
258 VideoNotBanked = 0,
259 VideoBanked1RW,
260 VideoBanked1R1W,
261 VideoBanked2RW,
262 NumVideoBankTypes
263 } VIDEO_BANK_TYPE, *PVIDEO_BANK_TYPE;
264
265 typedef struct _VIDEO_BANK_SELECT {
266 ULONG Length;
267 ULONG Size;
268 ULONG BankingFlags;
269 ULONG BankingType;
270 ULONG PlanarHCBankingType;
271 ULONG BitmapWidthInBytes;
272 ULONG BitmapSize;
273 ULONG Granularity;
274 ULONG PlanarHCGranularity;
275 ULONG CodeOffset;
276 ULONG PlanarHCBankCodeOffset;
277 ULONG PlanarHCEnableCodeOffset;
278 ULONG PlanarHCDisableCodeOffset;
279 } VIDEO_BANK_SELECT, *PVIDEO_BANK_SELECT;
280
281 typedef struct _VIDEO_LOAD_FONT_INFORMATION {
282 USHORT WidthInPixels;
283 USHORT HeightInPixels;
284 ULONG FontSize;
285 UCHAR Font[1];
286 } VIDEO_LOAD_FONT_INFORMATION, *PVIDEO_LOAD_FONT_INFORMATION;
287
288 /* VIDEO_COLOR_CAPABILITIES.AttributeFlags constants */
289 #define VIDEO_DEVICE_COLOR 0x00000001
290 #define VIDEO_OPTIONAL_GAMMET_TABLE 0x00000002
291
292 typedef struct _VIDEO_COLOR_CAPABILITIES {
293 ULONG Length;
294 ULONG AttributeFlags;
295 LONG RedPhosphoreDecay;
296 LONG GreenPhosphoreDecay;
297 LONG BluePhosphoreDecay;
298 LONG WhiteChromaticity_x;
299 LONG WhiteChromaticity_y;
300 LONG WhiteChromaticity_Y;
301 LONG RedChromaticity_x;
302 LONG RedChromaticity_y;
303 LONG GreenChromaticity_x;
304 LONG GreenChromaticity_y;
305 LONG BlueChromaticity_x;
306 LONG BlueChromaticity_y;
307 LONG WhiteGamma;
308 LONG RedGamma;
309 LONG GreenGamma;
310 LONG BlueGamma;
311 } VIDEO_COLOR_CAPABILITIES, *PVIDEO_COLOR_CAPABILITIES;
312
313 typedef struct _VIDEO_CURSOR_ATTRIBUTES {
314 USHORT Width;
315 USHORT Height;
316 SHORT Column;
317 SHORT Row;
318 UCHAR Rate;
319 UCHAR Enable;
320 } VIDEO_CURSOR_ATTRIBUTES, *PVIDEO_CURSOR_ATTRIBUTES;
321
322 typedef struct _VIDEO_CURSOR_POSITION {
323 SHORT Column;
324 SHORT Row;
325 } VIDEO_CURSOR_POSITION, *PVIDEO_CURSOR_POSITION;
326
327 typedef struct _VIDEO_POINTER_ATTRIBUTES {
328 ULONG Flags;
329 ULONG Width;
330 ULONG Height;
331 ULONG WidthInBytes;
332 ULONG Enable;
333 SHORT Column;
334 SHORT Row;
335 UCHAR Pixels[1];
336 } VIDEO_POINTER_ATTRIBUTES, *PVIDEO_POINTER_ATTRIBUTES;
337
338 /* VIDEO_POINTER_CAPABILITIES.Flags */
339 #define VIDEO_MODE_ASYNC_POINTER 0x01
340 #define VIDEO_MODE_MONO_POINTER 0x02
341 #define VIDEO_MODE_COLOR_POINTER 0x04
342 #define VIDEO_MODE_ANIMATE_START 0x08
343 #define VIDEO_MODE_ANIMATE_UPDATE 0x10
344
345 typedef struct _VIDEO_POINTER_CAPABILITIES {
346 ULONG Flags;
347 ULONG MaxWidth;
348 ULONG MaxHeight;
349 ULONG HWPtrBitmapStart;
350 ULONG HWPtrBitmapEnd;
351 } VIDEO_POINTER_CAPABILITIES, *PVIDEO_POINTER_CAPABILITIES;
352
353 typedef struct _VIDEO_POINTER_POSITION {
354 SHORT Column;
355 SHORT Row;
356 } VIDEO_POINTER_POSITION, *PVIDEO_POINTER_POSITION;
357
358
359 /* VIDEO_HARDWARE_STATE_HEADER.VGAStateFlags constants */
360 #define VIDEO_STATE_NON_STANDARD_VGA 0x00000001
361 #define VIDEO_STATE_UNEMULATED_VGA_STATE 0x00000002
362 #define VIDEO_STATE_PACKED_CHAIN4_MODE 0x00000004
363
364 typedef struct _VIDEO_HARDWARE_STATE_HEADER {
365 ULONG Length;
366 UCHAR PortValue[0x30];
367 ULONG AttribIndexDataState;
368 ULONG BasicSequencerOffset;
369 ULONG BasicCrtContOffset;
370 ULONG BasicGraphContOffset;
371 ULONG BasicAttribContOffset;
372 ULONG BasicDacOffset;
373 ULONG BasicLatchesOffset;
374 ULONG ExtendedSequencerOffset;
375 ULONG ExtendedCrtContOffset;
376 ULONG ExtendedGraphContOffset;
377 ULONG ExtendedAttribContOffset;
378 ULONG ExtendedDacOffset;
379 ULONG ExtendedValidatorStateOffset;
380 ULONG ExtendedMiscDataOffset;
381 ULONG PlaneLength;
382 ULONG Plane1Offset;
383 ULONG Plane2Offset;
384 ULONG Plane3Offset;
385 ULONG Plane4Offset;
386 ULONG VGAStateFlags;
387 ULONG DIBOffset;
388 ULONG DIBBitsPerPixel;
389 ULONG DIBXResolution;
390 ULONG DIBYResolution;
391 ULONG DIBXlatOffset;
392 ULONG DIBXlatLength;
393 ULONG VesaInfoOffset;
394 PVOID FrameBufferData;
395 } VIDEO_HARDWARE_STATE_HEADER, *PVIDEO_HARDWARE_STATE_HEADER;
396
397 typedef struct _VIDEO_CLUTDATA {
398 UCHAR Red;
399 UCHAR Green;
400 UCHAR Blue;
401 UCHAR Unused;
402 } VIDEO_CLUTDATA, *PVIDEO_CLUTDATA;
403
404 typedef struct {
405 USHORT NumEntries;
406 USHORT FirstEntry;
407 union {
408 VIDEO_CLUTDATA RgbArray;
409 ULONG RgbLong;
410 } LookupTable[1];
411 } VIDEO_CLUT, *PVIDEO_CLUT;
412
413 typedef struct _VIDEO_PALETTE_DATA {
414 USHORT NumEntries;
415 USHORT FirstEntry;
416 USHORT Colors[1];
417 } VIDEO_PALETTE_DATA, *PVIDEO_PALETTE_DATA;
418
419 typedef struct _VIDEO_HARDWARE_STATE {
420 PVIDEO_HARDWARE_STATE_HEADER StateHeader;
421 ULONG StateLength;
422 } VIDEO_HARDWARE_STATE, *PVIDEO_HARDWARE_STATE;
423
424 #define VIDEO_CHILD_ACTIVE 0x00000001
425 #define VIDEO_CHILD_DETACHED 0x00000002
426 #define VIDEO_CHILD_NOPRUNE_FREQ 0x80000000
427 #define VIDEO_CHILD_NOPRUNE_RESOLUTION 0x40000000
428
429 #define VIDEO_DUALVIEW_REMOVABLE 0x00000001
430 #define VIDEO_DUALVIEW_PRIMARY 0x80000000
431 #define VIDEO_DUALVIEW_SECONDARY 0x40000000
432
433 #ifdef __cplusplus
434 }
435 #endif
436
437 #endif /* __NTDDVDEO_H */