- NDK 0.98, now with versionned headers. Too many changes to list, see the TinyKRNL...
[reactos.git] / reactos / include / ndk / cmtypes.h
1 /*++ NDK Version: 0098
2
3 Copyright (c) Alex Ionescu. All rights reserved.
4
5 Header Name:
6
7 cmtypes.h
8
9 Abstract:
10
11 Type definitions for the Configuration Manager.
12
13 Author:
14
15 Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
16
17 --*/
18
19 #ifndef _CMTYPES_H
20 #define _CMTYPES_H
21
22 //
23 // Dependencies
24 //
25 #include <umtypes.h>
26 #include <cfg.h>
27 #include <iotypes.h>
28
29 #define MAX_BUS_NAME 24
30
31 //
32 // PLUGPLAY_CONTROL_RELATED_DEVICE_DATA.Relations
33 //
34 #define PNP_GET_PARENT_DEVICE 1
35 #define PNP_GET_CHILD_DEVICE 2
36 #define PNP_GET_SIBLING_DEVICE 3
37
38 //
39 // PLUGPLAY_CONTROL_STATUS_DATA Operations
40 //
41 #define PNP_GET_DEVICE_STATUS 0
42 #define PNP_SET_DEVICE_STATUS 1
43 #define PNP_CLEAR_DEVICE_STATUS 2
44
45 #ifdef NTOS_MODE_USER
46
47 //
48 // Resource Type
49 //
50 #define CmResourceTypeNull 0
51 #define CmResourceTypePort 1
52 #define CmResourceTypeInterrupt 2
53 #define CmResourceTypeMemory 3
54 #define CmResourceTypeDma 4
55 #define CmResourceTypeDeviceSpecific 5
56 #define CmResourceTypeBusNumber 6
57 #define CmResourceTypeMaximum 7
58 #define CmResourceTypeNonArbitrated 128
59 #define CmResourceTypeConfigData 128
60 #define CmResourceTypeDevicePrivate 129
61 #define CmResourceTypePcCardConfig 130
62 #define CmResourceTypeMfCardConfig 131
63
64
65 //
66 // Resource Descriptor Share Dispositions
67 //
68 typedef enum _CM_SHARE_DISPOSITION
69 {
70 CmResourceShareUndetermined,
71 CmResourceShareDeviceExclusive,
72 CmResourceShareDriverExclusive,
73 CmResourceShareShared
74 } CM_SHARE_DISPOSITION;
75
76 #endif
77
78 //
79 // Port Resource Descriptor Flags
80 //
81 #define CM_RESOURCE_PORT_MEMORY 0x0000
82 #define CM_RESOURCE_PORT_IO 0x0001
83 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
84 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
85 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
86 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
87 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
88 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
89
90 //
91 // Memory Resource Descriptor Flags
92 //
93 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
94 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
95 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
96 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
97 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
98 #define CM_RESOURCE_MEMORY_24 0x0010
99 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
100
101 //
102 // DMA Resource Descriptor Flags
103 //
104 #define CM_RESOURCE_DMA_8 0x0000
105 #define CM_RESOURCE_DMA_16 0x0001
106 #define CM_RESOURCE_DMA_32 0x0002
107 #define CM_RESOURCE_DMA_8_AND_16 0x0004
108 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
109 #define CM_RESOURCE_DMA_TYPE_A 0x0010
110 #define CM_RESOURCE_DMA_TYPE_B 0x0020
111 #define CM_RESOURCE_DMA_TYPE_F 0x0040
112
113 #ifdef NTOS_MODE_USER
114
115 //
116 // Information Classes for NtQueryKey
117 //
118 typedef enum _KEY_INFORMATION_CLASS
119 {
120 KeyBasicInformation,
121 KeyNodeInformation,
122 KeyFullInformation,
123 KeyNameInformation,
124 KeyCachedInformation,
125 KeyFlagsInformation
126 } KEY_INFORMATION_CLASS;
127
128 typedef enum _KEY_VALUE_INFORMATION_CLASS
129 {
130 KeyValueBasicInformation,
131 KeyValueFullInformation,
132 KeyValuePartialInformation,
133 KeyValueFullInformationAlign64,
134 KeyValuePartialInformationAlign64
135 } KEY_VALUE_INFORMATION_CLASS;
136
137 typedef enum _KEY_SET_INFORMATION_CLASS
138 {
139 KeyWriteTimeInformation,
140 KeyUserFlagsInformation,
141 MaxKeySetInfoClass
142 } KEY_SET_INFORMATION_CLASS;
143
144 #endif
145
146 //
147 // Plag and Play Classes
148 //
149 typedef enum _PLUGPLAY_CONTROL_CLASS
150 {
151 PlugPlayControlUserResponse = 0x07,
152 PlugPlayControlProperty = 0x0A,
153 PlugPlayControlGetRelatedDevice = 0x0C,
154 PlugPlayControlDeviceStatus = 0x0E,
155 PlugPlayControlGetDeviceDepth,
156 PlugPlayControlResetDevice = 0x14
157 } PLUGPLAY_CONTROL_CLASS;
158
159 typedef enum _PLUGPLAY_BUS_CLASS
160 {
161 SystemBus,
162 PlugPlayVirtualBus,
163 MaxPlugPlayBusClass
164 } PLUGPLAY_BUS_CLASS, *PPLUGPLAY_BUS_CLASS;
165
166 //
167 // Plag and Play Bus Types
168 //
169 typedef enum _PLUGPLAY_VIRTUAL_BUS_TYPE
170 {
171 Root,
172 MaxPlugPlayVirtualBusType
173 } PLUGPLAY_VIRTUAL_BUS_TYPE, *PPLUGPLAY_VIRTUAL_BUS_TYPE;
174
175 //
176 // Plag and Play Event Categories
177 //
178 typedef enum _PLUGPLAY_EVENT_CATEGORY
179 {
180 HardwareProfileChangeEvent,
181 TargetDeviceChangeEvent,
182 DeviceClassChangeEvent,
183 CustomDeviceEvent,
184 DeviceInstallEvent,
185 DeviceArrivalEvent,
186 PowerEvent,
187 VetoEvent,
188 BlockedDriverEvent,
189 MaxPlugEventCategory
190 } PLUGPLAY_EVENT_CATEGORY;
191
192 #ifdef NTOS_MODE_USER
193
194 //
195 // Information Structures for NtQueryKeyInformation
196 //
197 typedef struct _KEY_WRITE_TIME_INFORMATION
198 {
199 LARGE_INTEGER LastWriteTime;
200 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
201
202 typedef struct _KEY_USER_FLAGS_INFORMATION
203 {
204 ULONG UserFlags;
205 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
206
207 typedef struct _KEY_FULL_INFORMATION
208 {
209 LARGE_INTEGER LastWriteTime;
210 ULONG TitleIndex;
211 ULONG ClassOffset;
212 ULONG ClassLength;
213 ULONG SubKeys;
214 ULONG MaxNameLen;
215 ULONG MaxClassLen;
216 ULONG Values;
217 ULONG MaxValueNameLen;
218 ULONG MaxValueDataLen;
219 WCHAR Class[1];
220 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
221
222 typedef struct _KEY_NODE_INFORMATION
223 {
224 LARGE_INTEGER LastWriteTime;
225 ULONG TitleIndex;
226 ULONG ClassOffset;
227 ULONG ClassLength;
228 ULONG NameLength;
229 WCHAR Name[1];
230 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
231
232 typedef struct _KEY_VALUE_ENTRY
233 {
234 PUNICODE_STRING ValueName;
235 ULONG DataLength;
236 ULONG DataOffset;
237 ULONG Type;
238 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
239
240 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
241 {
242 ULONG TitleIndex;
243 ULONG Type;
244 ULONG DataLength;
245 UCHAR Data[1];
246 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
247
248 typedef struct _KEY_VALUE_BASIC_INFORMATION
249 {
250 ULONG TitleIndex;
251 ULONG Type;
252 ULONG NameLength;
253 WCHAR Name[1];
254 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
255
256 typedef struct _KEY_VALUE_FULL_INFORMATION
257 {
258 ULONG TitleIndex;
259 ULONG Type;
260 ULONG DataOffset;
261 ULONG DataLength;
262 ULONG NameLength;
263 WCHAR Name[1];
264 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
265
266 typedef struct _KEY_BASIC_INFORMATION
267 {
268 LARGE_INTEGER LastWriteTime;
269 ULONG TitleIndex;
270 ULONG NameLength;
271 WCHAR Name[1];
272 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
273
274 #endif
275
276 //
277 // Plug and Play Event Block
278 //
279 typedef struct _PLUGPLAY_EVENT_BLOCK
280 {
281 GUID EventGuid;
282 PLUGPLAY_EVENT_CATEGORY EventCategory;
283 PULONG Result;
284 ULONG Flags;
285 ULONG TotalSize;
286 PVOID DeviceObject;
287 union
288 {
289 struct
290 {
291 GUID ClassGuid;
292 WCHAR SymbolicLinkName[ANYSIZE_ARRAY];
293 } DeviceClass;
294 struct
295 {
296 WCHAR DeviceIds[ANYSIZE_ARRAY];
297 } TargetDevice;
298 struct
299 {
300 WCHAR DeviceId[ANYSIZE_ARRAY];
301 } InstallDevice;
302 struct
303 {
304 PVOID NotificationStructure;
305 WCHAR DeviceIds[ANYSIZE_ARRAY];
306 } CustomNotification;
307 struct
308 {
309 PVOID Notification;
310 } ProfileNotification;
311 struct
312 {
313 ULONG NotificationCode;
314 ULONG NotificationData;
315 } PowerNotification;
316 struct
317 {
318 PNP_VETO_TYPE VetoType;
319 WCHAR DeviceIdVetoNameBuffer[ANYSIZE_ARRAY];
320 } VetoNotification;
321 struct
322 {
323 GUID BlockedDriverGuid;
324 } BlockedDriverNotification;
325 };
326 } PLUGPLAY_EVENT_BLOCK, *PPLUGPLAY_EVENT_BLOCK;
327
328 //
329 // Plug and Play Control Classes
330 //
331
332 //Class 0x0A
333 typedef struct _PLUGPLAY_CONTROL_PROPERTY_DATA
334 {
335 UNICODE_STRING DeviceInstance;
336 ULONG Property;
337 PVOID Buffer;
338 ULONG BufferSize;
339 } PLUGPLAY_CONTROL_PROPERTY_DATA, *PPLUGPLAY_CONTROL_PROPERTY_DATA;
340
341 // Class 0x0C
342 typedef struct _PLUGPLAY_CONTROL_RELATED_DEVICE_DATA
343 {
344 UNICODE_STRING TargetDeviceInstance;
345 ULONG Relation;
346 PWCHAR RelatedDeviceInstance;
347 ULONG RelatedDeviceInstanceLength;
348 } PLUGPLAY_CONTROL_RELATED_DEVICE_DATA, *PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA;
349
350 // Class 0x0E
351 typedef struct _PLUGPLAY_CONTOL_STATUS_DATA
352 {
353 UNICODE_STRING DeviceInstance;
354 ULONG Operation;
355 ULONG DeviceStatus;
356 ULONG DeviceProblem;
357 } PLUGPLAY_CONTROL_STATUS_DATA, *PPLUGPLAY_CONTROL_STATUS_DATA;
358
359 // Class 0x0F
360 typedef struct _PLUGPLAY_CONTROL_DEPTH_DATA
361 {
362 UNICODE_STRING DeviceInstance;
363 ULONG Depth;
364 } PLUGPLAY_CONTROL_DEPTH_DATA, *PPLUGPLAY_CONTROL_DEPTH_DATA;
365
366 // Class 0x14
367 typedef struct _PLUGPLAY_CONTROL_RESET_DEVICE_DATA
368 {
369 UNICODE_STRING DeviceInstance;
370 } PLUGPLAY_CONTROL_RESET_DEVICE_DATA, *PPLUGPLAY_CONTROL_RESET_DEVICE_DATA;
371
372 //
373 // Plug and Play Bus Type Definition
374 //
375 typedef struct _PLUGPLAY_BUS_TYPE
376 {
377 PLUGPLAY_BUS_CLASS BusClass;
378 union
379 {
380 INTERFACE_TYPE SystemBusType;
381 PLUGPLAY_VIRTUAL_BUS_TYPE PlugPlayVirtualBusType;
382 };
383 } PLUGPLAY_BUS_TYPE, *PPLUGPLAY_BUS_TYPE;
384
385 //
386 // Plug and Play Bus Instance Definition
387 //
388 typedef struct _PLUGPLAY_BUS_INSTANCE
389 {
390 PLUGPLAY_BUS_TYPE BusType;
391 ULONG BusNumber;
392 WCHAR BusName[MAX_BUS_NAME];
393 } PLUGPLAY_BUS_INSTANCE, *PPLUGPLAY_BUS_INSTANCE;
394
395 #ifdef NTOS_MODE_USER
396
397 //
398 // Partial Resource Descriptor and List for Hardware
399 //
400 #include <pshpack1.h>
401 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
402 {
403 UCHAR Type;
404 UCHAR ShareDisposition;
405 USHORT Flags;
406 union
407 {
408 struct
409 {
410 PHYSICAL_ADDRESS Start;
411 ULONG Length;
412 } Generic;
413 struct
414 {
415 PHYSICAL_ADDRESS Start;
416 ULONG Length;
417 } Port;
418 struct
419 {
420 ULONG Level;
421 ULONG Vector;
422 ULONG Affinity;
423 } Interrupt;
424 struct
425 {
426 PHYSICAL_ADDRESS Start;
427 ULONG Length;
428 } Memory;
429 struct
430 {
431 ULONG Channel;
432 ULONG Port;
433 ULONG Reserved1;
434 } Dma;
435 struct
436 {
437 ULONG Data[3];
438 } DevicePrivate;
439 struct
440 {
441 ULONG Start;
442 ULONG Length;
443 ULONG Reserved;
444 } BusNumber;
445 struct
446 {
447 ULONG DataSize;
448 ULONG Reserved1;
449 ULONG Reserved2;
450 } DeviceSpecificData;
451 } u;
452 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
453
454 typedef struct _CM_PARTIAL_RESOURCE_LIST
455 {
456 USHORT Version;
457 USHORT Revision;
458 ULONG Count;
459 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
460 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
461
462 //
463 // Full Resource Descriptor and List for Hardware
464 //
465 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
466 {
467 INTERFACE_TYPE InterfaceType;
468 ULONG BusNumber;
469 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
470 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
471
472 typedef struct _CM_RESOURCE_LIST
473 {
474 ULONG Count;
475 CM_FULL_RESOURCE_DESCRIPTOR List[1];
476 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
477
478 //
479 // ROM Block Structure
480 //
481 typedef struct _CM_ROM_BLOCK
482 {
483 ULONG Address;
484 ULONG Size;
485 } CM_ROM_BLOCK, *PCM_ROM_BLOCK;
486
487 //
488 // Disk/INT13 Structures
489 //
490 typedef struct _CM_INT13_DRIVE_PARAMETER
491 {
492 USHORT DriveSelect;
493 ULONG MaxCylinders;
494 USHORT SectorsPerTrack;
495 USHORT MaxHeads;
496 USHORT NumberDrives;
497 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
498
499 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
500 {
501 ULONG BytesPerSector;
502 ULONG NumberOfCylinders;
503 ULONG SectorsPerTrack;
504 ULONG NumberOfHeads;
505 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
506
507 #include <poppack.h>
508
509 #endif // _!NTOS_MODE_USER
510
511 #endif // _CMTYPES_H
512