xref: /reactos/sdk/include/xdk/cmtypes.h (revision 84ccccab)
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       _ANONYMOUS_UNION 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   _Field_size_bytes_(DataLength) 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   _Field_size_bytes_(DataLength) 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 #if (NTDDI_VERSION < NTDDI_VISTA)
622 typedef struct _KEY_USER_FLAGS_INFORMATION {
623     ULONG   UserFlags;
624 } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
625 #endif
626 
627 typedef enum _REG_NOTIFY_CLASS {
628   RegNtDeleteKey,
629   RegNtPreDeleteKey = RegNtDeleteKey,
630   RegNtSetValueKey,
631   RegNtPreSetValueKey = RegNtSetValueKey,
632   RegNtDeleteValueKey,
633   RegNtPreDeleteValueKey = RegNtDeleteValueKey,
634   RegNtSetInformationKey,
635   RegNtPreSetInformationKey = RegNtSetInformationKey,
636   RegNtRenameKey,
637   RegNtPreRenameKey = RegNtRenameKey,
638   RegNtEnumerateKey,
639   RegNtPreEnumerateKey = RegNtEnumerateKey,
640   RegNtEnumerateValueKey,
641   RegNtPreEnumerateValueKey = RegNtEnumerateValueKey,
642   RegNtQueryKey,
643   RegNtPreQueryKey = RegNtQueryKey,
644   RegNtQueryValueKey,
645   RegNtPreQueryValueKey = RegNtQueryValueKey,
646   RegNtQueryMultipleValueKey,
647   RegNtPreQueryMultipleValueKey = RegNtQueryMultipleValueKey,
648   RegNtPreCreateKey,
649   RegNtPostCreateKey,
650   RegNtPreOpenKey,
651   RegNtPostOpenKey,
652   RegNtKeyHandleClose,
653   RegNtPreKeyHandleClose = RegNtKeyHandleClose,
654   RegNtPostDeleteKey,
655   RegNtPostSetValueKey,
656   RegNtPostDeleteValueKey,
657   RegNtPostSetInformationKey,
658   RegNtPostRenameKey,
659   RegNtPostEnumerateKey,
660   RegNtPostEnumerateValueKey,
661   RegNtPostQueryKey,
662   RegNtPostQueryValueKey,
663   RegNtPostQueryMultipleValueKey,
664   RegNtPostKeyHandleClose,
665   RegNtPreCreateKeyEx,
666   RegNtPostCreateKeyEx,
667   RegNtPreOpenKeyEx,
668   RegNtPostOpenKeyEx,
669   RegNtPreFlushKey,
670   RegNtPostFlushKey,
671   RegNtPreLoadKey,
672   RegNtPostLoadKey,
673   RegNtPreUnLoadKey,
674   RegNtPostUnLoadKey,
675   RegNtPreQueryKeySecurity,
676   RegNtPostQueryKeySecurity,
677   RegNtPreSetKeySecurity,
678   RegNtPostSetKeySecurity,
679   RegNtCallbackObjectContextCleanup,
680   RegNtPreRestoreKey,
681   RegNtPostRestoreKey,
682   RegNtPreSaveKey,
683   RegNtPostSaveKey,
684   RegNtPreReplaceKey,
685   RegNtPostReplaceKey,
686   MaxRegNtNotifyClass
687 } REG_NOTIFY_CLASS, *PREG_NOTIFY_CLASS;
688 
689 _IRQL_requires_same_
690 _Function_class_(EX_CALLBACK_FUNCTION)
691 typedef NTSTATUS
692 (NTAPI EX_CALLBACK_FUNCTION)(
693   _In_ PVOID CallbackContext,
694   _In_opt_ PVOID Argument1,
695   _In_opt_ PVOID Argument2);
696 typedef EX_CALLBACK_FUNCTION *PEX_CALLBACK_FUNCTION;
697 
698 typedef struct _REG_DELETE_KEY_INFORMATION {
699   PVOID Object;
700   PVOID CallContext;
701   PVOID ObjectContext;
702   PVOID Reserved;
703 } REG_DELETE_KEY_INFORMATION, *PREG_DELETE_KEY_INFORMATION
704 #if (NTDDI_VERSION >= NTDDI_VISTA)
705 , REG_FLUSH_KEY_INFORMATION, *PREG_FLUSH_KEY_INFORMATION
706 #endif
707 ;
708 
709 typedef struct _REG_SET_VALUE_KEY_INFORMATION {
710   PVOID Object;
711   PUNICODE_STRING ValueName;
712   ULONG TitleIndex;
713   ULONG Type;
714   PVOID Data;
715   ULONG DataSize;
716   PVOID CallContext;
717   PVOID ObjectContext;
718   PVOID Reserved;
719 } REG_SET_VALUE_KEY_INFORMATION, *PREG_SET_VALUE_KEY_INFORMATION;
720 
721 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION {
722   PVOID Object;
723   PUNICODE_STRING ValueName;
724   PVOID CallContext;
725   PVOID ObjectContext;
726   PVOID Reserved;
727 } REG_DELETE_VALUE_KEY_INFORMATION, *PREG_DELETE_VALUE_KEY_INFORMATION;
728 
729 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION {
730   PVOID Object;
731   KEY_SET_INFORMATION_CLASS KeySetInformationClass;
732   PVOID KeySetInformation;
733   ULONG KeySetInformationLength;
734   PVOID CallContext;
735   PVOID ObjectContext;
736   PVOID Reserved;
737 } REG_SET_INFORMATION_KEY_INFORMATION, *PREG_SET_INFORMATION_KEY_INFORMATION;
738 
739 typedef struct _REG_ENUMERATE_KEY_INFORMATION {
740   PVOID Object;
741   ULONG Index;
742   KEY_INFORMATION_CLASS KeyInformationClass;
743   PVOID KeyInformation;
744   ULONG Length;
745   PULONG ResultLength;
746   PVOID CallContext;
747   PVOID ObjectContext;
748   PVOID Reserved;
749 } REG_ENUMERATE_KEY_INFORMATION, *PREG_ENUMERATE_KEY_INFORMATION;
750 
751 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION {
752   PVOID Object;
753   ULONG Index;
754   KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
755   PVOID KeyValueInformation;
756   ULONG Length;
757   PULONG ResultLength;
758   PVOID CallContext;
759   PVOID ObjectContext;
760   PVOID Reserved;
761 } REG_ENUMERATE_VALUE_KEY_INFORMATION, *PREG_ENUMERATE_VALUE_KEY_INFORMATION;
762 
763 typedef struct _REG_QUERY_KEY_INFORMATION {
764   PVOID Object;
765   KEY_INFORMATION_CLASS KeyInformationClass;
766   PVOID KeyInformation;
767   ULONG Length;
768   PULONG ResultLength;
769   PVOID CallContext;
770   PVOID ObjectContext;
771   PVOID Reserved;
772 } REG_QUERY_KEY_INFORMATION, *PREG_QUERY_KEY_INFORMATION;
773 
774 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION {
775   PVOID Object;
776   PUNICODE_STRING ValueName;
777   KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass;
778   PVOID KeyValueInformation;
779   ULONG Length;
780   PULONG ResultLength;
781   PVOID CallContext;
782   PVOID ObjectContext;
783   PVOID Reserved;
784 } REG_QUERY_VALUE_KEY_INFORMATION, *PREG_QUERY_VALUE_KEY_INFORMATION;
785 
786 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION {
787   PVOID Object;
788   PKEY_VALUE_ENTRY ValueEntries;
789   ULONG EntryCount;
790   PVOID ValueBuffer;
791   PULONG BufferLength;
792   PULONG RequiredBufferLength;
793   PVOID CallContext;
794   PVOID ObjectContext;
795   PVOID Reserved;
796 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION;
797 
798 typedef struct _REG_RENAME_KEY_INFORMATION {
799   PVOID Object;
800   PUNICODE_STRING NewName;
801   PVOID CallContext;
802   PVOID ObjectContext;
803   PVOID Reserved;
804 } REG_RENAME_KEY_INFORMATION, *PREG_RENAME_KEY_INFORMATION;
805 
806 typedef struct _REG_CREATE_KEY_INFORMATION {
807   PUNICODE_STRING CompleteName;
808   PVOID RootObject;
809   PVOID ObjectType;
810   ULONG CreateOptions;
811   PUNICODE_STRING Class;
812   PVOID SecurityDescriptor;
813   PVOID SecurityQualityOfService;
814   ACCESS_MASK DesiredAccess;
815   ACCESS_MASK GrantedAccess;
816   PULONG Disposition;
817   PVOID *ResultObject;
818   PVOID CallContext;
819   PVOID RootObjectContext;
820   PVOID Transaction;
821   PVOID Reserved;
822 } REG_CREATE_KEY_INFORMATION, REG_OPEN_KEY_INFORMATION,*PREG_CREATE_KEY_INFORMATION, *PREG_OPEN_KEY_INFORMATION;
823 
824 typedef struct _REG_CREATE_KEY_INFORMATION_V1 {
825   PUNICODE_STRING CompleteName;
826   PVOID RootObject;
827   PVOID ObjectType;
828   ULONG Options;
829   PUNICODE_STRING Class;
830   PVOID SecurityDescriptor;
831   PVOID SecurityQualityOfService;
832   ACCESS_MASK DesiredAccess;
833   ACCESS_MASK GrantedAccess;
834   PULONG Disposition;
835   PVOID *ResultObject;
836   PVOID CallContext;
837   PVOID RootObjectContext;
838   PVOID Transaction;
839   ULONG_PTR Version;
840   PUNICODE_STRING RemainingName;
841   ULONG Wow64Flags;
842   ULONG Attributes;
843   KPROCESSOR_MODE CheckAccessMode;
844 } REG_CREATE_KEY_INFORMATION_V1, REG_OPEN_KEY_INFORMATION_V1,*PREG_CREATE_KEY_INFORMATION_V1, *PREG_OPEN_KEY_INFORMATION_V1;
845 
846 typedef struct _REG_PRE_CREATE_KEY_INFORMATION {
847   PUNICODE_STRING CompleteName;
848 } REG_PRE_CREATE_KEY_INFORMATION, REG_PRE_OPEN_KEY_INFORMATION,*PREG_PRE_CREATE_KEY_INFORMATION, *PREG_PRE_OPEN_KEY_INFORMATION;
849 
850 typedef struct _REG_POST_CREATE_KEY_INFORMATION {
851   PUNICODE_STRING CompleteName;
852   PVOID Object;
853   NTSTATUS Status;
854 } REG_POST_CREATE_KEY_INFORMATION,REG_POST_OPEN_KEY_INFORMATION, *PREG_POST_CREATE_KEY_INFORMATION, *PREG_POST_OPEN_KEY_INFORMATION;
855 
856 typedef struct _REG_POST_OPERATION_INFORMATION {
857   PVOID Object;
858   NTSTATUS Status;
859   PVOID PreInformation;
860   NTSTATUS ReturnStatus;
861   PVOID CallContext;
862   PVOID ObjectContext;
863   PVOID Reserved;
864 } REG_POST_OPERATION_INFORMATION,*PREG_POST_OPERATION_INFORMATION;
865 
866 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION {
867   PVOID Object;
868   PVOID CallContext;
869   PVOID ObjectContext;
870   PVOID Reserved;
871 } REG_KEY_HANDLE_CLOSE_INFORMATION, *PREG_KEY_HANDLE_CLOSE_INFORMATION;
872 
873 #if (NTDDI_VERSION >= NTDDI_VISTA)
874 
875 typedef struct _REG_LOAD_KEY_INFORMATION {
876   PVOID Object;
877   PUNICODE_STRING KeyName;
878   PUNICODE_STRING SourceFile;
879   ULONG Flags;
880   PVOID TrustClassObject;
881   PVOID UserEvent;
882   ACCESS_MASK DesiredAccess;
883   PHANDLE RootHandle;
884   PVOID CallContext;
885   PVOID ObjectContext;
886   PVOID Reserved;
887 } REG_LOAD_KEY_INFORMATION, *PREG_LOAD_KEY_INFORMATION;
888 
889 typedef struct _REG_UNLOAD_KEY_INFORMATION {
890   PVOID Object;
891   PVOID UserEvent;
892   PVOID CallContext;
893   PVOID ObjectContext;
894   PVOID Reserved;
895 } REG_UNLOAD_KEY_INFORMATION, *PREG_UNLOAD_KEY_INFORMATION;
896 
897 typedef struct _REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION {
898   PVOID Object;
899   PVOID ObjectContext;
900   PVOID Reserved;
901 } REG_CALLBACK_CONTEXT_CLEANUP_INFORMATION, *PREG_CALLBACK_CONTEXT_CLEANUP_INFORMATION;
902 
903 typedef struct _REG_QUERY_KEY_SECURITY_INFORMATION {
904   PVOID Object;
905   PSECURITY_INFORMATION SecurityInformation;
906   PSECURITY_DESCRIPTOR SecurityDescriptor;
907   PULONG Length;
908   PVOID CallContext;
909   PVOID ObjectContext;
910   PVOID Reserved;
911 } REG_QUERY_KEY_SECURITY_INFORMATION, *PREG_QUERY_KEY_SECURITY_INFORMATION;
912 
913 typedef struct _REG_SET_KEY_SECURITY_INFORMATION {
914   PVOID Object;
915   PSECURITY_INFORMATION SecurityInformation;
916   PSECURITY_DESCRIPTOR SecurityDescriptor;
917   PVOID CallContext;
918   PVOID ObjectContext;
919   PVOID Reserved;
920 } REG_SET_KEY_SECURITY_INFORMATION, *PREG_SET_KEY_SECURITY_INFORMATION;
921 
922 typedef struct _REG_RESTORE_KEY_INFORMATION {
923   PVOID Object;
924   HANDLE FileHandle;
925   ULONG Flags;
926   PVOID CallContext;
927   PVOID ObjectContext;
928   PVOID Reserved;
929 } REG_RESTORE_KEY_INFORMATION, *PREG_RESTORE_KEY_INFORMATION;
930 
931 typedef struct _REG_SAVE_KEY_INFORMATION {
932   PVOID Object;
933   HANDLE FileHandle;
934   ULONG Format;
935   PVOID CallContext;
936   PVOID ObjectContext;
937   PVOID Reserved;
938 } REG_SAVE_KEY_INFORMATION, *PREG_SAVE_KEY_INFORMATION;
939 
940 typedef struct _REG_REPLACE_KEY_INFORMATION {
941   PVOID Object;
942   PUNICODE_STRING OldFileName;
943   PUNICODE_STRING NewFileName;
944   PVOID CallContext;
945   PVOID ObjectContext;
946   PVOID Reserved;
947 } REG_REPLACE_KEY_INFORMATION, *PREG_REPLACE_KEY_INFORMATION;
948 
949 #endif /* NTDDI_VERSION >= NTDDI_VISTA */
950 
951 #define SERVICE_KERNEL_DRIVER          0x00000001
952 #define SERVICE_FILE_SYSTEM_DRIVER     0x00000002
953 #define SERVICE_ADAPTER                0x00000004
954 #define SERVICE_RECOGNIZER_DRIVER      0x00000008
955 
956 #define SERVICE_DRIVER                 (SERVICE_KERNEL_DRIVER | \
957                                         SERVICE_FILE_SYSTEM_DRIVER | \
958                                         SERVICE_RECOGNIZER_DRIVER)
959 
960 #define SERVICE_WIN32_OWN_PROCESS      0x00000010
961 #define SERVICE_WIN32_SHARE_PROCESS    0x00000020
962 #define SERVICE_WIN32                  (SERVICE_WIN32_OWN_PROCESS | \
963                                         SERVICE_WIN32_SHARE_PROCESS)
964 
965 #define SERVICE_INTERACTIVE_PROCESS    0x00000100
966 
967 #define SERVICE_TYPE_ALL               (SERVICE_WIN32  | \
968                                         SERVICE_ADAPTER | \
969                                         SERVICE_DRIVER  | \
970                                         SERVICE_INTERACTIVE_PROCESS)
971 
972 /* Service Start Types */
973 #define SERVICE_BOOT_START             0x00000000
974 #define SERVICE_SYSTEM_START           0x00000001
975 #define SERVICE_AUTO_START             0x00000002
976 #define SERVICE_DEMAND_START           0x00000003
977 #define SERVICE_DISABLED               0x00000004
978 
979 #define SERVICE_ERROR_IGNORE           0x00000000
980 #define SERVICE_ERROR_NORMAL           0x00000001
981 #define SERVICE_ERROR_SEVERE           0x00000002
982 #define SERVICE_ERROR_CRITICAL         0x00000003
983 
984 typedef enum _CM_SERVICE_NODE_TYPE {
985   DriverType = SERVICE_KERNEL_DRIVER,
986   FileSystemType = SERVICE_FILE_SYSTEM_DRIVER,
987   Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS,
988   Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS,
989   AdapterType = SERVICE_ADAPTER,
990   RecognizerType = SERVICE_RECOGNIZER_DRIVER
991 } SERVICE_NODE_TYPE;
992 
993 typedef enum _CM_SERVICE_LOAD_TYPE {
994   BootLoad = SERVICE_BOOT_START,
995   SystemLoad = SERVICE_SYSTEM_START,
996   AutoLoad = SERVICE_AUTO_START,
997   DemandLoad = SERVICE_DEMAND_START,
998   DisableLoad = SERVICE_DISABLED
999 } SERVICE_LOAD_TYPE;
1000 
1001 typedef enum _CM_ERROR_CONTROL_TYPE {
1002   IgnoreError = SERVICE_ERROR_IGNORE,
1003   NormalError = SERVICE_ERROR_NORMAL,
1004   SevereError = SERVICE_ERROR_SEVERE,
1005   CriticalError = SERVICE_ERROR_CRITICAL
1006 } SERVICE_ERROR_TYPE;
1007 
1008 #define CM_SERVICE_NETWORK_BOOT_LOAD      0x00000001
1009 #define CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD 0x00000002
1010 #define CM_SERVICE_USB_DISK_BOOT_LOAD     0x00000004
1011 
1012 #define CM_SERVICE_VALID_PROMOTION_MASK (CM_SERVICE_NETWORK_BOOT_LOAD |       \
1013                                          CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD |  \
1014                                          CM_SERVICE_USB_DISK_BOOT_LOAD)
1015 
1016 $endif (_WDMDDK_)
1017 $if (_NTDDK_)
1018 typedef struct _KEY_NAME_INFORMATION {
1019   ULONG NameLength;
1020   WCHAR Name[1];
1021 } KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION;
1022 
1023 typedef struct _KEY_CACHED_INFORMATION {
1024   LARGE_INTEGER LastWriteTime;
1025   ULONG TitleIndex;
1026   ULONG SubKeys;
1027   ULONG MaxNameLen;
1028   ULONG Values;
1029   ULONG MaxValueNameLen;
1030   ULONG MaxValueDataLen;
1031   ULONG NameLength;
1032 } KEY_CACHED_INFORMATION, *PKEY_CACHED_INFORMATION;
1033 
1034 typedef struct _KEY_VIRTUALIZATION_INFORMATION {
1035   ULONG VirtualizationCandidate:1;
1036   ULONG VirtualizationEnabled:1;
1037   ULONG VirtualTarget:1;
1038   ULONG VirtualStore:1;
1039   ULONG VirtualSource:1;
1040   ULONG Reserved:27;
1041 } KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION;
1042 
1043 #define CmResourceTypeMaximum             8
1044 
1045 typedef struct _CM_PCCARD_DEVICE_DATA {
1046   UCHAR Flags;
1047   UCHAR ErrorCode;
1048   USHORT Reserved;
1049   ULONG BusData;
1050   ULONG DeviceId;
1051   ULONG LegacyBaseAddress;
1052   UCHAR IRQMap[16];
1053 } CM_PCCARD_DEVICE_DATA, *PCM_PCCARD_DEVICE_DATA;
1054 
1055 $endif (_NTDDK_)
1056