2599a78cfc4313073dfe17a17ca980e4bf79b6cb
[reactos.git] / include / xdk / cmtypes.h
1 /******************************************************************************
2 * Configuration Manager Types *
3 ******************************************************************************/
4
5 $if (_WDMDDK_)
6 /* Resource list definitions */
7 typedef int CM_RESOURCE_TYPE;
8
9 #define CmResourceTypeNull 0
10 #define CmResourceTypePort 1
11 #define CmResourceTypeInterrupt 2
12 #define CmResourceTypeMemory 3
13 #define CmResourceTypeDma 4
14 #define CmResourceTypeDeviceSpecific 5
15 #define CmResourceTypeBusNumber 6
16 #define CmResourceTypeNonArbitrated 128
17 #define CmResourceTypeConfigData 128
18 #define CmResourceTypeDevicePrivate 129
19 #define CmResourceTypePcCardConfig 130
20 #define CmResourceTypeMfCardConfig 131
21
22 /* KEY_VALUE_Xxx.Type */
23 #define REG_NONE 0
24 #define REG_SZ 1
25 #define REG_EXPAND_SZ 2
26 #define REG_BINARY 3
27 #define REG_DWORD 4
28 #define REG_DWORD_LITTLE_ENDIAN 4
29 #define REG_DWORD_BIG_ENDIAN 5
30 #define REG_LINK 6
31 #define REG_MULTI_SZ 7
32 #define REG_RESOURCE_LIST 8
33 #define REG_FULL_RESOURCE_DESCRIPTOR 9
34 #define REG_RESOURCE_REQUIREMENTS_LIST 10
35 #define REG_QWORD 11
36 #define REG_QWORD_LITTLE_ENDIAN 11
37
38 /* Registry Access Rights */
39 #define KEY_QUERY_VALUE (0x0001)
40 #define KEY_SET_VALUE (0x0002)
41 #define KEY_CREATE_SUB_KEY (0x0004)
42 #define KEY_ENUMERATE_SUB_KEYS (0x0008)
43 #define KEY_NOTIFY (0x0010)
44 #define KEY_CREATE_LINK (0x0020)
45 #define KEY_WOW64_32KEY (0x0200)
46 #define KEY_WOW64_64KEY (0x0100)
47 #define KEY_WOW64_RES (0x0300)
48
49 #define KEY_READ ((STANDARD_RIGHTS_READ |\
50 KEY_QUERY_VALUE |\
51 KEY_ENUMERATE_SUB_KEYS |\
52 KEY_NOTIFY) \
53 & \
54 (~SYNCHRONIZE))
55
56 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
57 KEY_SET_VALUE |\
58 KEY_CREATE_SUB_KEY) \
59 & \
60 (~SYNCHRONIZE))
61
62 #define KEY_EXECUTE ((KEY_READ) \
63 & \
64 (~SYNCHRONIZE))
65
66 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
67 KEY_QUERY_VALUE |\
68 KEY_SET_VALUE |\
69 KEY_CREATE_SUB_KEY |\
70 KEY_ENUMERATE_SUB_KEYS |\
71 KEY_NOTIFY |\
72 KEY_CREATE_LINK) \
73 & \
74 (~SYNCHRONIZE))
75
76 /* Registry Open/Create Options */
77 #define REG_OPTION_RESERVED (0x00000000L)
78 #define REG_OPTION_NON_VOLATILE (0x00000000L)
79 #define REG_OPTION_VOLATILE (0x00000001L)
80 #define REG_OPTION_CREATE_LINK (0x00000002L)
81 #define REG_OPTION_BACKUP_RESTORE (0x00000004L)
82 #define REG_OPTION_OPEN_LINK (0x00000008L)
83
84 #define REG_LEGAL_OPTION \
85 (REG_OPTION_RESERVED |\
86 REG_OPTION_NON_VOLATILE |\
87 REG_OPTION_VOLATILE |\
88 REG_OPTION_CREATE_LINK |\
89 REG_OPTION_BACKUP_RESTORE |\
90 REG_OPTION_OPEN_LINK)
91
92 #define REG_OPEN_LEGAL_OPTION \
93 (REG_OPTION_RESERVED |\
94 REG_OPTION_BACKUP_RESTORE |\
95 REG_OPTION_OPEN_LINK)
96
97 #define REG_STANDARD_FORMAT 1
98 #define REG_LATEST_FORMAT 2
99 #define REG_NO_COMPRESSION 4
100
101 /* Key creation/open disposition */
102 #define REG_CREATED_NEW_KEY (0x00000001L)
103 #define REG_OPENED_EXISTING_KEY (0x00000002L)
104
105 /* Key restore & hive load flags */
106 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
107 #define REG_REFRESH_HIVE (0x00000002L)
108 #define REG_NO_LAZY_FLUSH (0x00000004L)
109 #define REG_FORCE_RESTORE (0x00000008L)
110 #define REG_APP_HIVE (0x00000010L)
111 #define REG_PROCESS_PRIVATE (0x00000020L)
112 #define REG_START_JOURNAL (0x00000040L)
113 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
114 #define REG_HIVE_NO_RM (0x00000100L)
115 #define REG_HIVE_SINGLE_LOG (0x00000200L)
116 #define REG_BOOT_HIVE (0x00000400L)
117
118 /* Unload Flags */
119 #define REG_FORCE_UNLOAD 1
120
121 /* Notify Filter Values */
122 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
123 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
124 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
125 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
126
127 #define REG_LEGAL_CHANGE_FILTER \
128 (REG_NOTIFY_CHANGE_NAME |\
129 REG_NOTIFY_CHANGE_ATTRIBUTES |\
130 REG_NOTIFY_CHANGE_LAST_SET |\
131 REG_NOTIFY_CHANGE_SECURITY)
132
133 #include <pshpack4.h>
134 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR {
135 UCHAR Type;
136 UCHAR ShareDisposition;
137 USHORT Flags;
138 union {
139 struct {
140 PHYSICAL_ADDRESS Start;
141 ULONG Length;
142 } Generic;
143 struct {
144 PHYSICAL_ADDRESS Start;
145 ULONG Length;
146 } Port;
147 struct {
148 #if defined(NT_PROCESSOR_GROUPS)
149 USHORT Level;
150 USHORT Group;
151 #else
152 ULONG Level;
153 #endif
154 ULONG Vector;
155 KAFFINITY Affinity;
156 } Interrupt;
157 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
158 struct {
159 __GNU_EXTENSION union {
160 struct {
161 #if defined(NT_PROCESSOR_GROUPS)
162 USHORT Group;
163 #else
164 USHORT Reserved;
165 #endif
166 USHORT MessageCount;
167 ULONG Vector;
168 KAFFINITY Affinity;
169 } Raw;
170 struct {
171 #if defined(NT_PROCESSOR_GROUPS)
172 USHORT Level;
173 USHORT Group;
174 #else
175 ULONG Level;
176 #endif
177 ULONG Vector;
178 KAFFINITY Affinity;
179 } Translated;
180 } DUMMYUNIONNAME;
181 } MessageInterrupt;
182 #endif
183 struct {
184 PHYSICAL_ADDRESS Start;
185 ULONG Length;
186 } Memory;
187 struct {
188 ULONG Channel;
189 ULONG Port;
190 ULONG Reserved1;
191 } Dma;
192 struct {
193 ULONG Data[3];
194 } DevicePrivate;
195 struct {
196 ULONG Start;
197 ULONG Length;
198 ULONG Reserved;
199 } BusNumber;
200 struct {
201 ULONG DataSize;
202 ULONG Reserved1;
203 ULONG Reserved2;
204 } DeviceSpecificData;
205 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
206 struct {
207 PHYSICAL_ADDRESS Start;
208 ULONG Length40;
209 } Memory40;
210 struct {
211 PHYSICAL_ADDRESS Start;
212 ULONG Length48;
213 } Memory48;
214 struct {
215 PHYSICAL_ADDRESS Start;
216 ULONG Length64;
217 } Memory64;
218 #endif
219 } u;
220 } CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
221 #include <poppack.h>
222
223 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
224 #define CmResourceTypeNull 0
225 #define CmResourceTypePort 1
226 #define CmResourceTypeInterrupt 2
227 #define CmResourceTypeMemory 3
228 #define CmResourceTypeDma 4
229 #define CmResourceTypeDeviceSpecific 5
230 #define CmResourceTypeBusNumber 6
231 #define CmResourceTypeMemoryLarge 7
232 #define CmResourceTypeNonArbitrated 128
233 #define CmResourceTypeConfigData 128
234 #define CmResourceTypeDevicePrivate 129
235 #define CmResourceTypePcCardConfig 130
236 #define CmResourceTypeMfCardConfig 131
237
238 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
239 typedef enum _CM_SHARE_DISPOSITION {
240 CmResourceShareUndetermined = 0,
241 CmResourceShareDeviceExclusive,
242 CmResourceShareDriverExclusive,
243 CmResourceShareShared
244 } CM_SHARE_DISPOSITION;
245
246 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
247 #define CM_RESOURCE_PORT_MEMORY 0x0000
248 #define CM_RESOURCE_PORT_IO 0x0001
249 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
250 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
251 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
252 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
253 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
254 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
255 #define CM_RESOURCE_PORT_BAR 0x0100
256
257 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
258 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
259 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
260 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
261 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
262
263 #define CM_RESOURCE_INTERRUPT_LEVEL_LATCHED_BITS 0x0001
264
265 #define CM_RESOURCE_INTERRUPT_MESSAGE_TOKEN ((ULONG)-2)
266
267 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
268 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
269 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
270 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
271 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
272 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
273 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
274 #define CM_RESOURCE_MEMORY_24 0x0010
275 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
276 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
277 #define CM_RESOURCE_MEMORY_BAR 0x0080
278 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
279
280 #define CM_RESOURCE_MEMORY_LARGE 0x0E00
281 #define CM_RESOURCE_MEMORY_LARGE_40 0x0200
282 #define CM_RESOURCE_MEMORY_LARGE_48 0x0400
283 #define CM_RESOURCE_MEMORY_LARGE_64 0x0800
284
285 #define CM_RESOURCE_MEMORY_LARGE_40_MAXLEN 0x000000FFFFFFFF00
286 #define CM_RESOURCE_MEMORY_LARGE_48_MAXLEN 0x0000FFFFFFFF0000
287 #define CM_RESOURCE_MEMORY_LARGE_64_MAXLEN 0xFFFFFFFF00000000
288
289 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
290 #define CM_RESOURCE_DMA_8 0x0000
291 #define CM_RESOURCE_DMA_16 0x0001
292 #define CM_RESOURCE_DMA_32 0x0002
293 #define CM_RESOURCE_DMA_8_AND_16 0x0004
294 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
295 #define CM_RESOURCE_DMA_TYPE_A 0x0010
296 #define CM_RESOURCE_DMA_TYPE_B 0x0020
297 #define CM_RESOURCE_DMA_TYPE_F 0x0040
298
299 typedef struct _DEVICE_FLAGS {
300 ULONG Failed:1;
301 ULONG ReadOnly:1;
302 ULONG Removable:1;
303 ULONG ConsoleIn:1;
304 ULONG ConsoleOut:1;
305 ULONG Input:1;
306 ULONG Output:1;
307 } DEVICE_FLAGS, *PDEVICE_FLAGS;
308
309 typedef enum _INTERFACE_TYPE {
310 InterfaceTypeUndefined = -1,
311 Internal,
312 Isa,
313 Eisa,
314 MicroChannel,
315 TurboChannel,
316 PCIBus,
317 VMEBus,
318 NuBus,
319 PCMCIABus,
320 CBus,
321 MPIBus,
322 MPSABus,
323 ProcessorInternal,
324 InternalPowerBus,
325 PNPISABus,
326 PNPBus,
327 Vmcs,
328 MaximumInterfaceType
329 } INTERFACE_TYPE, *PINTERFACE_TYPE;
330
331 typedef struct _CM_COMPONENT_INFORMATION {
332 DEVICE_FLAGS Flags;
333 ULONG Version;
334 ULONG Key;
335 KAFFINITY AffinityMask;
336 } CM_COMPONENT_INFORMATION, *PCM_COMPONENT_INFORMATION;
337
338 typedef struct _CM_ROM_BLOCK {
339 ULONG Address;
340 ULONG Size;
341 } CM_ROM_BLOCK, *PCM_ROM_BLOCK;
342
343 typedef struct _CM_PARTIAL_RESOURCE_LIST {
344 USHORT Version;
345 USHORT Revision;
346 ULONG Count;
347 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
348 } CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
349
350 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR {
351 INTERFACE_TYPE InterfaceType;
352 ULONG BusNumber;
353 CM_PARTIAL_RESOURCE_LIST PartialResourceList;
354 } CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
355
356 typedef struct _CM_RESOURCE_LIST {
357 ULONG Count;
358 CM_FULL_RESOURCE_DESCRIPTOR List[1];
359 } CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
360
361 typedef struct _PNP_BUS_INFORMATION {
362 GUID BusTypeGuid;
363 INTERFACE_TYPE LegacyBusType;
364 ULONG BusNumber;
365 } PNP_BUS_INFORMATION, *PPNP_BUS_INFORMATION;
366
367 #include <pshpack1.h>
368
369 typedef struct _CM_INT13_DRIVE_PARAMETER {
370 USHORT DriveSelect;
371 ULONG MaxCylinders;
372 USHORT SectorsPerTrack;
373 USHORT MaxHeads;
374 USHORT NumberDrives;
375 } CM_INT13_DRIVE_PARAMETER, *PCM_INT13_DRIVE_PARAMETER;
376
377 typedef struct _CM_MCA_POS_DATA {
378 USHORT AdapterId;
379 UCHAR PosData1;
380 UCHAR PosData2;
381 UCHAR PosData3;
382 UCHAR PosData4;
383 } CM_MCA_POS_DATA, *PCM_MCA_POS_DATA;
384
385 typedef struct _CM_PNP_BIOS_DEVICE_NODE {
386 USHORT Size;
387 UCHAR Node;
388 ULONG ProductId;
389 UCHAR DeviceType[3];
390 USHORT DeviceAttributes;
391 } CM_PNP_BIOS_DEVICE_NODE,*PCM_PNP_BIOS_DEVICE_NODE;
392
393 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK {
394 UCHAR Signature[4];
395 UCHAR Revision;
396 UCHAR Length;
397 USHORT ControlField;
398 UCHAR Checksum;
399 ULONG EventFlagAddress;
400 USHORT RealModeEntryOffset;
401 USHORT RealModeEntrySegment;
402 USHORT ProtectedModeEntryOffset;
403 ULONG ProtectedModeCodeBaseAddress;
404 ULONG OemDeviceId;
405 USHORT RealModeDataBaseAddress;
406 ULONG ProtectedModeDataBaseAddress;
407 } CM_PNP_BIOS_INSTALLATION_CHECK, *PCM_PNP_BIOS_INSTALLATION_CHECK;
408
409 #include <poppack.h>
410
411 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA {
412 ULONG BytesPerSector;
413 ULONG NumberOfCylinders;
414 ULONG SectorsPerTrack;
415 ULONG NumberOfHeads;
416 } CM_DISK_GEOMETRY_DEVICE_DATA, *PCM_DISK_GEOMETRY_DEVICE_DATA;
417
418 typedef struct _CM_KEYBOARD_DEVICE_DATA {
419 USHORT Version;
420 USHORT Revision;
421 UCHAR Type;
422 UCHAR Subtype;
423 USHORT KeyboardFlags;
424 } CM_KEYBOARD_DEVICE_DATA, *PCM_KEYBOARD_DEVICE_DATA;
425
426 typedef struct _CM_SCSI_DEVICE_DATA {
427 USHORT Version;
428 USHORT Revision;
429 UCHAR HostIdentifier;
430 } CM_SCSI_DEVICE_DATA, *PCM_SCSI_DEVICE_DATA;
431
432 typedef struct _CM_VIDEO_DEVICE_DATA {
433 USHORT Version;
434 USHORT Revision;
435 ULONG VideoClock;
436 } CM_VIDEO_DEVICE_DATA, *PCM_VIDEO_DEVICE_DATA;
437
438 typedef struct _CM_SONIC_DEVICE_DATA {
439 USHORT Version;
440 USHORT Revision;
441 USHORT DataConfigurationRegister;
442 UCHAR EthernetAddress[8];
443 } CM_SONIC_DEVICE_DATA, *PCM_SONIC_DEVICE_DATA;
444
445 typedef struct _CM_SERIAL_DEVICE_DATA {
446 USHORT Version;
447 USHORT Revision;
448 ULONG BaudClock;
449 } CM_SERIAL_DEVICE_DATA, *PCM_SERIAL_DEVICE_DATA;
450
451 typedef struct _CM_MONITOR_DEVICE_DATA {
452 USHORT Version;
453 USHORT Revision;
454 USHORT HorizontalScreenSize;
455 USHORT VerticalScreenSize;
456 USHORT HorizontalResolution;
457 USHORT VerticalResolution;
458 USHORT HorizontalDisplayTimeLow;
459 USHORT HorizontalDisplayTime;
460 USHORT HorizontalDisplayTimeHigh;
461 USHORT HorizontalBackPorchLow;
462 USHORT HorizontalBackPorch;
463 USHORT HorizontalBackPorchHigh;
464 USHORT HorizontalFrontPorchLow;
465 USHORT HorizontalFrontPorch;
466 USHORT HorizontalFrontPorchHigh;
467 USHORT HorizontalSyncLow;
468 USHORT HorizontalSync;
469 USHORT HorizontalSyncHigh;
470 USHORT VerticalBackPorchLow;
471 USHORT VerticalBackPorch;
472 USHORT VerticalBackPorchHigh;
473 USHORT VerticalFrontPorchLow;
474 USHORT VerticalFrontPorch;
475 USHORT VerticalFrontPorchHigh;
476 USHORT VerticalSyncLow;
477 USHORT VerticalSync;
478 USHORT VerticalSyncHigh;
479 } CM_MONITOR_DEVICE_DATA, *PCM_MONITOR_DEVICE_DATA;
480
481 typedef struct _CM_FLOPPY_DEVICE_DATA {
482 USHORT Version;
483 USHORT Revision;
484 CHAR Size[8];
485 ULONG MaxDensity;
486 ULONG MountDensity;
487 UCHAR StepRateHeadUnloadTime;
488 UCHAR HeadLoadTime;
489 UCHAR MotorOffTime;
490 UCHAR SectorLengthCode;
491 UCHAR SectorPerTrack;
492 UCHAR ReadWriteGapLength;
493 UCHAR DataTransferLength;
494 UCHAR FormatGapLength;
495 UCHAR FormatFillCharacter;
496 UCHAR HeadSettleTime;
497 UCHAR MotorSettleTime;
498 UCHAR MaximumTrackValue;
499 UCHAR DataTransferRate;
500 } CM_FLOPPY_DEVICE_DATA, *PCM_FLOPPY_DEVICE_DATA;
501
502 typedef enum _KEY_INFORMATION_CLASS {
503 KeyBasicInformation,
504 KeyNodeInformation,
505 KeyFullInformation,
506 KeyNameInformation,
507 KeyCachedInformation,
508 KeyFlagsInformation,
509 KeyVirtualizationInformation,
510 KeyHandleTagsInformation,
511 MaxKeyInfoClass
512 } KEY_INFORMATION_CLASS;
513
514 typedef struct _KEY_BASIC_INFORMATION {
515 LARGE_INTEGER LastWriteTime;
516 ULONG TitleIndex;
517 ULONG NameLength;
518 WCHAR Name[1];
519 } KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
520
521 typedef struct _KEY_CONTROL_FLAGS_INFORMATION {
522 ULONG ControlFlags;
523 } KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION;
524
525 typedef struct _KEY_FULL_INFORMATION {
526 LARGE_INTEGER LastWriteTime;
527 ULONG TitleIndex;
528 ULONG ClassOffset;
529 ULONG ClassLength;
530 ULONG SubKeys;
531 ULONG MaxNameLen;
532 ULONG MaxClassLen;
533 ULONG Values;
534 ULONG MaxValueNameLen;
535 ULONG MaxValueDataLen;
536 WCHAR Class[1];
537 } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
538
539 typedef struct _KEY_HANDLE_TAGS_INFORMATION {
540 ULONG HandleTags;
541 } KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION;
542
543 typedef struct _KEY_NODE_INFORMATION {
544 LARGE_INTEGER LastWriteTime;
545 ULONG TitleIndex;
546 ULONG ClassOffset;
547 ULONG ClassLength;
548 ULONG NameLength;
549 WCHAR Name[1];
550 } KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
551
552 typedef enum _KEY_SET_INFORMATION_CLASS {
553 KeyWriteTimeInformation,
554 KeyWow64FlagsInformation,
555 KeyControlFlagsInformation,
556 KeySetVirtualizationInformation,
557 KeySetDebugInformation,
558 KeySetHandleTagsInformation,
559 MaxKeySetInfoClass
560 } KEY_SET_INFORMATION_CLASS;
561
562 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION {
563 ULONG VirtualTarget:1;
564 ULONG VirtualStore:1;
565 ULONG VirtualSource:1;
566 ULONG Reserved:29;
567 } KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION;
568
569 typedef struct _KEY_VALUE_BASIC_INFORMATION {
570 ULONG TitleIndex;
571 ULONG Type;
572 ULONG NameLength;
573 WCHAR Name[1];
574 } KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
575
576 typedef struct _KEY_VALUE_FULL_INFORMATION {
577 ULONG TitleIndex;
578 ULONG Type;
579 ULONG DataOffset;
580 ULONG DataLength;
581 ULONG NameLength;
582 WCHAR Name[1];
583 } KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
584
585 typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
586 ULONG TitleIndex;
587 ULONG Type;
588 ULONG DataLength;
589 UCHAR Data[1];
590 } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
591
592 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 {
593 ULONG Type;
594 ULONG DataLength;
595 UCHAR Data[1];
596 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64;
597
598 typedef struct _KEY_VALUE_ENTRY {
599 PUNICODE_STRING ValueName;
600 ULONG DataLength;
601 ULONG DataOffset;
602 ULONG Type;
603 } KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
604
605 typedef enum _KEY_VALUE_INFORMATION_CLASS {
606 KeyValueBasicInformation,
607 KeyValueFullInformation,
608 KeyValuePartialInformation,
609 KeyValueFullInformationAlign64,
610 KeyValuePartialInformationAlign64
611 } KEY_VALUE_INFORMATION_CLASS;
612
613 typedef struct _KEY_WOW64_FLAGS_INFORMATION {
614 ULONG UserFlags;
615 } KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION;
616
617 typedef struct _KEY_WRITE_TIME_INFORMATION {
618 LARGE_INTEGER LastWriteTime;
619 } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
620
621 typedef enum _REG_NOTIFY_CLASS {
622 RegNtDeleteKey,
623 RegNtPreDeleteKey = RegNtDeleteKey,
624 RegNtSetValueKey,
625 RegNtPreSetValueKey = RegNtSetValueKey,
626 RegNtDeleteValueKey,
627 RegNtPreDeleteValueKey = RegNtDeleteValueKey,
628 RegNtSetInformationKey,
629 RegNtPreSetInformationKey = RegNtSetInformationKey,
630 RegNtRenameKey,
631 RegNtPreRenameKey = RegNtRenameKey,
632 RegNtEnumerateKey,
633 RegNtPreEnumerateKey = RegNtEnumerateKey,
634 RegNtEnumerateValueKey,
635 RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
636 RegNtQueryKey,
637 RegNtPreQueryKey = RegNtQueryKey,
638 RegNtQueryValueKey,
639 RegNtPreQueryValueKey = RegNtQueryValueKey,
640 RegNtQueryMultipleValueKey,
641 RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
642 RegNtPreCreateKey,
643 RegNtPostCreateKey,
644 RegNtPreOpenKey,
645 RegNtPostOpenKey,
646 RegNtKeyHandleClose,
647 RegNtPreKeyHandleClose = RegNtKeyHandleClose,
648 RegNtPostDeleteKey,
649 RegNtPostSetValueKey,
650 RegNtPostDeleteValueKey,
651 RegNtPostSetInformationKey,
652 RegNtPostRenameKey,
653 RegNtPostEnumerateKey,
654 RegNtPostEnumerateValueKey,
655 RegNtPostQueryKey,
656 RegNtPostQueryValueKey,
657 RegNtPostQueryMultipleValueKey,
658 RegNtPostKeyHandleClose,
659 RegNtPreCreateKeyEx,
660 RegNtPostCreateKeyEx,
661 RegNtPreOpenKeyEx,
662 RegNtPostOpenKeyEx,
663 RegNtPreFlushKey,
664 RegNtPostFlushKey,
665 RegNtPreLoadKey,
666 RegNtPostLoadKey,
667 RegNtPreUnLoadKey,
668 RegNtPostUnLoadKey,
669 RegNtPreQueryKeySecurity,
670 RegNtPostQueryKeySecurity,
671 RegNtPreSetKeySecurity,
672 RegNtPostSetKeySecurity,
673 RegNtCallbackObjectContextCleanup,
674 RegNtPreRestoreKey,
675 RegNtPostRestoreKey,
676 RegNtPreSaveKey,
677 RegNtPostSaveKey,
678 RegNtPreReplaceKey,
679 RegNtPostReplaceKey,
680 MaxRegNtNotifyClass
681 } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS;
682
683 typedef NTSTATUS
684 (NTAPI EX_CALLBACK_FUNCTION)(
685 IN PVOID CallbackContext,
686 IN PVOID Argument1,
687 IN PVOID Argument2);
688 typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
689
690 typedef struct _REG_DELETE_KEY_INFORMATION {
691 PVOID Object;
692 PVOID CallContext;
693 PVOID ObjectContext;
694 PVOID Reserved;
695 } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
696 #if (NTDDI_VERSION >= NTDDI_VISTA)
697 , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
698 #endif
699 ;
700
701 typedef struct _REG_SET_VALUE_KEY_INFORMATION {
702 PVOID Object;
703 PUNICODE_STRING ValueName;
704 ULONG TitleIndex;
705 ULONG Type;
706 PVOID Data;
707 ULONG DataSize;
708 PVOID CallContext;
709 PVOID ObjectContext;
710 PVOID Reserved;
711 } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
712
713 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
714 PVOID Object;
715 PUNICODE_STRING ValueName;
716 PVOID CallContext;
717 PVOID ObjectContext;
718 PVOID Reserved;
719 } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
720
721 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
722 PVOID Object;
723 KEY_SET_INFORMATION_CLASS KeySetInformationClass;
724 PVOID KeySetInformation;
725 ULONG KeySetInformationLength;
726 PVOID CallContext;
727 PVOID ObjectContext;
728 PVOID Reserved;
729 } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
730
731 typedef struct _REG_ENUMERATE_KEY_INFORMATION {
732 PVOID Object;
733 ULONG Index;
734 KEY_INFORMATION_CLASS KeyInformationClass;
735 PVOID KeyInformation;
736 ULONG Length;
737 PULONG ResultLength;
738 PVOID CallContext;
739 PVOID ObjectContext;
740 PVOID Reserved;
741 } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
742
743 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
744 PVOID Object;
745 ULONG Index;
746 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
747 PVOID KeyValueInformation;
748 ULONG Length;
749 PULONG ResultLength;
750 PVOID CallContext;
751 PVOID ObjectContext;
752 PVOID Reserved;
753 } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
754
755 typedef struct _REG_QUERY_KEY_INFORMATION {
756 PVOID Object;
757 KEY_INFORMATION_CLASS KeyInformationClass;
758 PVOID KeyInformation;
759 ULONG Length;
760 PULONG ResultLength;
761 PVOID CallContext;
762 PVOID ObjectContext;
763 PVOID Reserved;
764 } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
765
766 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
767 PVOID Object;
768 PUNICODE_STRING ValueName;
769 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
770 PVOID KeyValueInformation;
771 ULONG Length;
772 PULONG ResultLength;
773 PVOID CallContext;
774 PVOID ObjectContext;
775 PVOID Reserved;
776 } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
777
778 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
779 PVOID Object;
780 PKEY_VALUE_ENTRY ValueEntries;
781 ULONG EntryCount;
782 PVOID ValueBuffer;
783 PULONG BufferLength;
784 PULONG RequiredBufferLength;
785 PVOID CallContext;
786 PVOID ObjectContext;
787 PVOID Reserved;
788 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
789
790 typedef struct _REG_RENAME_KEY_INFORMATION {
791 PVOID Object;
792 PUNICODE_STRING NewName;
793 PVOID CallContext;
794 PVOID ObjectContext;
795 PVOID Reserved;
796 } REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION;
797
798 typedef struct _REG_CREATE_KEY_INFORMATION {
799 PUNICODE_STRING CompleteName;
800 PVOID RootObject;
801 PVOID ObjectType;
802 ULONG CreateOptions;
803 PUNICODE_STRING Class;
804 PVOID SecurityDescriptor;
805 PVOID SecurityQualityOfService;
806 ACCESS_MASK DesiredAccess;
807 ACCESS_MASK GrantedAccess;
808 PULONG Disposition;
809 PVOID *ResultObject;
810 PVOID CallContext;
811 PVOID RootObjectContext;
812 PVOID Transaction;
813 PVOID Reserved;
814 } REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION;
815
816 typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
817 PUNICODE_STRING CompleteName;
818 PVOID RootObject;
819 PVOID ObjectType;
820 ULONG Options;
821 PUNICODE_STRING Class;
822 PVOID SecurityDescriptor;
823 PVOID SecurityQualityOfService;
824 ACCESS_MASK DesiredAccess;
825 ACCESS_MASK GrantedAccess;
826 PULONG Disposition;
827 PVOID *ResultObject;
828 PVOID CallContext;
829 PVOID RootObjectContext;
830 PVOID Transaction;
831 ULONG_PTR Version;
832 PUNICODE_STRING RemainingName;
833 ULONG Wow64Flags;
834 ULONG Attributes;
835 KPROCESSOR_MODE CheckAccessMode;
836 } REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1;
837
838 typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
839 PUNICODE_STRING CompleteName;
840 } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;;
841
842 typedef struct _REG_POST_CREATE_KEY_INFORMATION {
843 PUNICODE_STRING CompleteName;
844 PVOID Object;
845 NTSTATUS Status;
846 } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
847
848 typedef struct _REG_POST_OPERATION_INFORMATION {
849 PVOID Object;
850 NTSTATUS Status;
851 PVOID PreInformation;
852 NTSTATUS ReturnStatus;
853 PVOID CallContext;
854 PVOID ObjectContext;
855 PVOID Reserved;
856 } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
857
858 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
859 PVOID Object;
860 PVOID CallContext;
861 PVOID ObjectContext;
862 PVOID Reserved;
863 } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
864
865 #if (NTDDI_VERSION >= NTDDI_VISTA)
866
867 typedef struct _REG_LOAD_KEY_INFORMATION {
868 PVOID Object;
869 PUNICODE_STRING KeyName;
870 PUNICODE_STRING SourceFile;
871 ULONG Flags;
872 PVOID TrustClassObject;
873 PVOID UserEvent;
874 ACCESS_MASK DesiredAccess;
875 PHANDLE RootHandle;
876 PVOID CallContext;
877 PVOID ObjectContext;
878 PVOID Reserved;
879 } REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION;
880
881 typedef struct _REG_UNLOAD_KEY_INFORMATION {
882 PVOID Object;
883 PVOID UserEvent;
884 PVOID CallContext;
885 PVOID ObjectContext;
886 PVOID Reserved;
887 } REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
888
889 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
890 PVOID Object;
891 PVOID ObjectContext;
892 PVOID Reserved;
893 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
894
895 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
896 PVOID Object;
897 PSECURITY_INFORMATION SecurityInformation;
898 PSECURITY_DESCRIPTOR SecurityDescriptor;
899 PULONG Length;
900 PVOID CallContext;
901 PVOID ObjectContext;
902 PVOID Reserved;
903 } REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION;
904
905 typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
906 PVOID Object;
907 PSECURITY_INFORMATION SecurityInformation;
908 PSECURITY_DESCRIPTOR SecurityDescriptor;
909 PVOID CallContext;
910 PVOID ObjectContext;
911 PVOID Reserved;
912 } REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION;
913
914 typedef struct _REG_RESTORE_KEY_INFORMATION {
915 PVOID Object;
916 HANDLE FileHandle;
917 ULONG Flags;
918 PVOID CallContext;
919 PVOID ObjectContext;
920 PVOID Reserved;
921 } REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION;
922
923 typedef struct _REG_SAVE_KEY_INFORMATION {
924 PVOID Object;
925 HANDLE FileHandle;
926 ULONG Format;
927 PVOID CallContext;
928 PVOID ObjectContext;
929 PVOID Reserved;
930 } REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION;
931
932 typedef struct _REG_REPLACE_KEY_INFORMATION {
933 PVOID Object;
934 PUNICODE_STRING OldFileName;
935 PUNICODE_STRING NewFileName;
936 PVOID CallContext;
937 PVOID ObjectContext;
938 PVOID Reserved;
939 } REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION;
940
941 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
942
943 #define SERVICE_KERNEL_DRIVER 0x00000001
944 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
945 #define SERVICE_ADAPTER 0x00000004
946 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
947
948 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
949 SERVICE_FILE_SYSTEM_DRIVER | \
950 SERVICE_RECOGNIZER_DRIVER)
951
952 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
953 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
954 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
955 SERVICE_WIN32_SHARE_PROCESS)
956
957 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
958
959 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
960 SERVICE_ADAPTER | \
961 SERVICE_DRIVER | \
962 SERVICE_INTERACTIVE_PROCESS)
963
964 /* Service Start Types */
965 #define SERVICE_BOOT_START 0x00000000
966 #define SERVICE_SYSTEM_START 0x00000001
967 #define SERVICE_AUTO_START 0x00000002
968 #define SERVICE_DEMAND_START 0x00000003
969 #define SERVICE_DISABLED 0x00000004
970
971 #define SERVICE_ERROR_IGNORE 0x00000000
972 #define SERVICE_ERROR_NORMAL 0x00000001
973 #define SERVICE_ERROR_SEVERE 0x00000002
974 #define SERVICE_ERROR_CRITICAL 0x00000003
975
976 typedef enum _CM_SERVICE_NODE_TYPE {
977 DriverType = SERVICE_KERNEL_DRIVER,
978 FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
979 Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
980 Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
981 AdapterType = SERVICE_ADAPTER,
982 RecognizerType = SERVICE_RECOGNIZER_DRIVER
983 } SERVICE_NODE_TYPE;
984
985 typedef enum _CM_SERVICE_LOAD_TYPE {
986 BootLoad = SERVICE_BOOT_START,
987 SystemLoad = SERVICE_SYSTEM_START,
988 AutoLoad = SERVICE_AUTO_START,
989 DemandLoad = SERVICE_DEMAND_START,
990 DisableLoad = SERVICE_DISABLED
991 } SERVICE_LOAD_TYPE;
992
993 typedef enum _CM_ERROR_CONTROL_TYPE {
994 IgnoreError = SERVICE_ERROR_IGNORE,
995 NormalError = SERVICE_ERROR_NORMAL,
996 SevereError = SERVICE_ERROR_SEVERE,
997 CriticalError = SERVICE_ERROR_CRITICAL
998 } SERVICE_ERROR_TYPE;
999
1000 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
1001 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
1002 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
1003
1004 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
1005 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
1006 CM_SERVICE_USB_DISK_BOOT_LOAD)
1007
1008 $endif
1009 $if (_NTDDK_)
1010
1011 typedef struct _KEY_NAME_INFORMATION {
1012 ULONG NameLength;
1013 WCHAR Name[1];
1014 } KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
1015
1016 typedef struct _KEY_CACHED_INFORMATION {
1017 LARGE_INTEGER LastWriteTime;
1018 ULONG TitleIndex;
1019 ULONG SubKeys;
1020 ULONG MaxNameLen;
1021 ULONG Values;
1022 ULONG MaxValueNameLen;
1023 ULONG MaxValueDataLen;
1024 ULONG NameLength;
1025 } KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION;
1026
1027 typedef struct _KEY_VIRTUALIZATION_INFORMATION {
1028 ULONG VirtualizationCandidate:1;
1029 ULONG VirtualizationEnabled:1;
1030 ULONG VirtualTarget:1;
1031 ULONG VirtualStore:1;
1032 ULONG VirtualSource:1;
1033 ULONG Reserved:27;
1034 } KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
1035
1036 #define CmResourceTypeMaximum 8
1037
1038 typedef struct _CM_PCCARD_DEVICE_DATA {
1039 UCHAR Flags;
1040 UCHAR ErrorCode;
1041 USHORT Reserved;
1042 ULONG BusData;
1043 ULONG DeviceId;
1044 ULONG LegacyBaseAddress;
1045 UCHAR IRQMap[16];
1046 } CM_PCCARD_DEVICE_DATA, *PCM_PCCARD_DEVICE_DATA;
1047
1048 $endif /* _NTDDK_ */