[EXT2FSD]
[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 *PEX_CALLBACK_FUNCTION)(
685 IN PVOID CallbackContext,
686 IN PVOID Argument1,
687 IN PVOID Argument2);
688
689 typedef struct _REG_DELETE_KEY_INFORMATION {
690 PVOID Object;
691 PVOID CallContext;
692 PVOID ObjectContext;
693 PVOID Reserved;
694 } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
695 #if (NTDDI_VERSION >= NTDDI_VISTA)
696 , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
697 #endif
698 ;
699
700 typedef struct _REG_SET_VALUE_KEY_INFORMATION {
701 PVOID Object;
702 PUNICODE_STRING ValueName;
703 ULONG TitleIndex;
704 ULONG Type;
705 PVOID Data;
706 ULONG DataSize;
707 PVOID CallContext;
708 PVOID ObjectContext;
709 PVOID Reserved;
710 } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
711
712 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
713 PVOID Object;
714 PUNICODE_STRING ValueName;
715 PVOID CallContext;
716 PVOID ObjectContext;
717 PVOID Reserved;
718 } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
719
720 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
721 PVOID Object;
722 KEY_SET_INFORMATION_CLASS KeySetInformationClass;
723 PVOID KeySetInformation;
724 ULONG KeySetInformationLength;
725 PVOID CallContext;
726 PVOID ObjectContext;
727 PVOID Reserved;
728 } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
729
730 typedef struct _REG_ENUMERATE_KEY_INFORMATION {
731 PVOID Object;
732 ULONG Index;
733 KEY_INFORMATION_CLASS KeyInformationClass;
734 PVOID KeyInformation;
735 ULONG Length;
736 PULONG ResultLength;
737 PVOID CallContext;
738 PVOID ObjectContext;
739 PVOID Reserved;
740 } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
741
742 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
743 PVOID Object;
744 ULONG Index;
745 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
746 PVOID KeyValueInformation;
747 ULONG Length;
748 PULONG ResultLength;
749 PVOID CallContext;
750 PVOID ObjectContext;
751 PVOID Reserved;
752 } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
753
754 typedef struct _REG_QUERY_KEY_INFORMATION {
755 PVOID Object;
756 KEY_INFORMATION_CLASS KeyInformationClass;
757 PVOID KeyInformation;
758 ULONG Length;
759 PULONG ResultLength;
760 PVOID CallContext;
761 PVOID ObjectContext;
762 PVOID Reserved;
763 } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
764
765 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
766 PVOID Object;
767 PUNICODE_STRING ValueName;
768 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
769 PVOID KeyValueInformation;
770 ULONG Length;
771 PULONG ResultLength;
772 PVOID CallContext;
773 PVOID ObjectContext;
774 PVOID Reserved;
775 } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
776
777 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
778 PVOID Object;
779 PKEY_VALUE_ENTRY ValueEntries;
780 ULONG EntryCount;
781 PVOID ValueBuffer;
782 PULONG BufferLength;
783 PULONG RequiredBufferLength;
784 PVOID CallContext;
785 PVOID ObjectContext;
786 PVOID Reserved;
787 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
788
789 typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
790 PUNICODE_STRING CompleteName;
791 } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;;
792
793 typedef struct _REG_POST_CREATE_KEY_INFORMATION {
794 PUNICODE_STRING CompleteName;
795 PVOID Object;
796 NTSTATUS Status;
797 } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
798
799 typedef struct _REG_POST_OPERATION_INFORMATION {
800 PVOID Object;
801 NTSTATUS Status;
802 PVOID PreInformation;
803 NTSTATUS ReturnStatus;
804 PVOID CallContext;
805 PVOID ObjectContext;
806 PVOID Reserved;
807 } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
808
809 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
810 PVOID Object;
811 PVOID CallContext;
812 PVOID ObjectContext;
813 PVOID Reserved;
814 } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
815
816 #define SERVICE_KERNEL_DRIVER 0x00000001
817 #define SERVICE_FILE_SYSTEM_DRIVER 0x00000002
818 #define SERVICE_ADAPTER 0x00000004
819 #define SERVICE_RECOGNIZER_DRIVER 0x00000008
820
821 #define SERVICE_DRIVER (SERVICE_KERNEL_DRIVER | \
822 SERVICE_FILE_SYSTEM_DRIVER | \
823 SERVICE_RECOGNIZER_DRIVER)
824
825 #define SERVICE_WIN32_OWN_PROCESS 0x00000010
826 #define SERVICE_WIN32_SHARE_PROCESS 0x00000020
827 #define SERVICE_WIN32 (SERVICE_WIN32_OWN_PROCESS | \
828 SERVICE_WIN32_SHARE_PROCESS)
829
830 #define SERVICE_INTERACTIVE_PROCESS 0x00000100
831
832 #define SERVICE_TYPE_ALL (SERVICE_WIN32 | \
833 SERVICE_ADAPTER | \
834 SERVICE_DRIVER | \
835 SERVICE_INTERACTIVE_PROCESS)
836
837 /* Service Start Types */
838 #define SERVICE_BOOT_START 0x00000000
839 #define SERVICE_SYSTEM_START 0x00000001
840 #define SERVICE_AUTO_START 0x00000002
841 #define SERVICE_DEMAND_START 0x00000003
842 #define SERVICE_DISABLED 0x00000004
843
844 #define SERVICE_ERROR_IGNORE 0x00000000
845 #define SERVICE_ERROR_NORMAL 0x00000001
846 #define SERVICE_ERROR_SEVERE 0x00000002
847 #define SERVICE_ERROR_CRITICAL 0x00000003
848
849 typedef enum _CM_SERVICE_NODE_TYPE {
850 DriverType = SERVICE_KERNEL_DRIVER,
851 FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
852 Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
853 Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
854 AdapterType = SERVICE_ADAPTER,
855 RecognizerType = SERVICE_RECOGNIZER_DRIVER
856 } SERVICE_NODE_TYPE;
857
858 typedef enum _CM_SERVICE_LOAD_TYPE {
859 BootLoad = SERVICE_BOOT_START,
860 SystemLoad = SERVICE_SYSTEM_START,
861 AutoLoad = SERVICE_AUTO_START,
862 DemandLoad = SERVICE_DEMAND_START,
863 DisableLoad = SERVICE_DISABLED
864 } SERVICE_LOAD_TYPE;
865
866 typedef enum _CM_ERROR_CONTROL_TYPE {
867 IgnoreError = SERVICE_ERROR_IGNORE,
868 NormalError = SERVICE_ERROR_NORMAL,
869 SevereError = SERVICE_ERROR_SEVERE,
870 CriticalError = SERVICE_ERROR_CRITICAL
871 } SERVICE_ERROR_TYPE;
872
873 #define CM_SERVICE_NETWORK_BOOT_LOAD 0x00000001
874 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
875 #define CM_SERVICE_USB_DISK_BOOT_LOAD 0x00000004
876
877 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD | \
878 CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD | \
879 CM_SERVICE_USB_DISK_BOOT_LOAD)
880
881 $endif
882
883