1 /******************************************************************************
2 * Configuration Manager Types *
3 ******************************************************************************/
6 /* Resource list definitions */
7 typedef int CM_RESOURCE_TYPE
;
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
22 /* KEY_VALUE_Xxx.Type */
25 #define REG_EXPAND_SZ 2
28 #define REG_DWORD_LITTLE_ENDIAN 4
29 #define REG_DWORD_BIG_ENDIAN 5
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
36 #define REG_QWORD_LITTLE_ENDIAN 11
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)
49 #define KEY_READ ((STANDARD_RIGHTS_READ |\
51 KEY_ENUMERATE_SUB_KEYS |\
56 #define KEY_WRITE ((STANDARD_RIGHTS_WRITE |\
62 #define KEY_EXECUTE ((KEY_READ) \
66 #define KEY_ALL_ACCESS ((STANDARD_RIGHTS_ALL |\
70 KEY_ENUMERATE_SUB_KEYS |\
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)
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 |\
92 #define REG_OPEN_LEGAL_OPTION \
93 (REG_OPTION_RESERVED |\
94 REG_OPTION_BACKUP_RESTORE |\
97 #define REG_STANDARD_FORMAT 1
98 #define REG_LATEST_FORMAT 2
99 #define REG_NO_COMPRESSION 4
101 /* Key creation/open disposition */
102 #define REG_CREATED_NEW_KEY (0x00000001L)
103 #define REG_OPENED_EXISTING_KEY (0x00000002L)
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)
119 #define REG_FORCE_UNLOAD 1
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)
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)
133 typedef struct _CM_FLOPPY_DEVICE_DATA
{
139 UCHAR StepRateHeadUnloadTime
;
142 UCHAR SectorLengthCode
;
143 UCHAR SectorPerTrack
;
144 UCHAR ReadWriteGapLength
;
145 UCHAR DataTransferLength
;
146 UCHAR FormatGapLength
;
147 UCHAR FormatFillCharacter
;
148 UCHAR HeadSettleTime
;
149 UCHAR MotorSettleTime
;
150 UCHAR MaximumTrackValue
;
151 UCHAR DataTransferRate
;
152 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
154 #include <pshpack4.h>
155 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
157 UCHAR ShareDisposition
;
161 PHYSICAL_ADDRESS Start
;
165 PHYSICAL_ADDRESS Start
;
169 #if defined(NT_PROCESSOR_GROUPS)
178 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
180 __GNU_EXTENSION
union {
182 #if defined(NT_PROCESSOR_GROUPS)
192 #if defined(NT_PROCESSOR_GROUPS)
205 PHYSICAL_ADDRESS Start
;
225 } DeviceSpecificData
;
226 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
228 PHYSICAL_ADDRESS Start
;
232 PHYSICAL_ADDRESS Start
;
236 PHYSICAL_ADDRESS Start
;
241 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
244 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
245 #define CmResourceTypeNull 0
246 #define CmResourceTypePort 1
247 #define CmResourceTypeInterrupt 2
248 #define CmResourceTypeMemory 3
249 #define CmResourceTypeDma 4
250 #define CmResourceTypeDeviceSpecific 5
251 #define CmResourceTypeBusNumber 6
252 #define CmResourceTypeMemoryLarge 7
253 #define CmResourceTypeNonArbitrated 128
254 #define CmResourceTypeConfigData 128
255 #define CmResourceTypeDevicePrivate 129
256 #define CmResourceTypePcCardConfig 130
257 #define CmResourceTypeMfCardConfig 131
259 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
260 typedef enum _CM_SHARE_DISPOSITION
{
261 CmResourceShareUndetermined
,
262 CmResourceShareDeviceExclusive
,
263 CmResourceShareDriverExclusive
,
264 CmResourceShareShared
265 } CM_SHARE_DISPOSITION
;
267 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
268 #define CM_RESOURCE_PORT_MEMORY 0x0000
269 #define CM_RESOURCE_PORT_IO 0x0001
270 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
271 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
272 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
273 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
274 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
275 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
276 #define CM_RESOURCE_PORT_BAR 0x0100
278 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
279 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
280 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
281 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
282 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
284 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
285 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
286 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
287 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
288 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
289 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
290 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
291 #define CM_RESOURCE_MEMORY_24 0x0010
292 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
293 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
294 #define CM_RESOURCE_MEMORY_BAR 0x0080
295 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
297 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
298 #define CM_RESOURCE_DMA_8 0x0000
299 #define CM_RESOURCE_DMA_16 0x0001
300 #define CM_RESOURCE_DMA_32 0x0002
301 #define CM_RESOURCE_DMA_8_AND_16 0x0004
302 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
303 #define CM_RESOURCE_DMA_TYPE_A 0x0010
304 #define CM_RESOURCE_DMA_TYPE_B 0x0020
305 #define CM_RESOURCE_DMA_TYPE_F 0x0040
307 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
311 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
312 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
314 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
315 INTERFACE_TYPE InterfaceType
;
317 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
318 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
320 typedef struct _CM_RESOURCE_LIST
{
322 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
323 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
325 #include <pshpack1.h>
326 typedef struct _CM_INT13_DRIVE_PARAMETER
{
329 USHORT SectorsPerTrack
;
332 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
334 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
339 USHORT DeviceAttributes
;
340 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
342 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
348 ULONG EventFlagAddress
;
349 USHORT RealModeEntryOffset
;
350 USHORT RealModeEntrySegment
;
351 USHORT ProtectedModeEntryOffset
;
352 ULONG ProtectedModeCodeBaseAddress
;
354 USHORT RealModeDataBaseAddress
;
355 ULONG ProtectedModeDataBaseAddress
;
356 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
359 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
360 ULONG BytesPerSector
;
361 ULONG NumberOfCylinders
;
362 ULONG SectorsPerTrack
;
364 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
366 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
371 USHORT KeyboardFlags
;
372 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
374 typedef struct _CM_MCA_POS_DATA
{
380 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
382 typedef struct _CM_SCSI_DEVICE_DATA
{
385 UCHAR HostIdentifier
;
386 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
388 typedef struct _CM_SERIAL_DEVICE_DATA
{
392 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
394 typedef enum _KEY_INFORMATION_CLASS
{
399 KeyCachedInformation
,
401 KeyVirtualizationInformation
,
402 KeyHandleTagsInformation
,
404 } KEY_INFORMATION_CLASS
;
406 typedef struct _KEY_BASIC_INFORMATION
{
407 LARGE_INTEGER LastWriteTime
;
411 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
413 typedef struct _KEY_CONTROL_FLAGS_INFORMATION
{
415 } KEY_CONTROL_FLAGS_INFORMATION
, *PKEY_CONTROL_FLAGS_INFORMATION
;
417 typedef struct _KEY_FULL_INFORMATION
{
418 LARGE_INTEGER LastWriteTime
;
426 ULONG MaxValueNameLen
;
427 ULONG MaxValueDataLen
;
429 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
431 typedef struct _KEY_HANDLE_TAGS_INFORMATION
{
433 } KEY_HANDLE_TAGS_INFORMATION
, *PKEY_HANDLE_TAGS_INFORMATION
;
435 typedef struct _KEY_NODE_INFORMATION
{
436 LARGE_INTEGER LastWriteTime
;
442 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
444 typedef enum _KEY_SET_INFORMATION_CLASS
{
445 KeyWriteTimeInformation
,
446 KeyWow64FlagsInformation
,
447 KeyControlFlagsInformation
,
448 KeySetVirtualizationInformation
,
449 KeySetDebugInformation
,
450 KeySetHandleTagsInformation
,
452 } KEY_SET_INFORMATION_CLASS
;
454 typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION
{
455 ULONG VirtualTarget
:1;
456 ULONG VirtualStore
:1;
457 ULONG VirtualSource
:1;
459 } KEY_SET_VIRTUALIZATION_INFORMATION
, *PKEY_SET_VIRTUALIZATION_INFORMATION
;
461 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
466 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
468 typedef struct _KEY_VALUE_FULL_INFORMATION
{
475 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
477 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
482 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
484 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
488 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
490 typedef struct _KEY_VALUE_ENTRY
{
491 PUNICODE_STRING ValueName
;
495 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
497 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
498 KeyValueBasicInformation
,
499 KeyValueFullInformation
,
500 KeyValuePartialInformation
,
501 KeyValueFullInformationAlign64
,
502 KeyValuePartialInformationAlign64
503 } KEY_VALUE_INFORMATION_CLASS
;
505 typedef struct _KEY_WOW64_FLAGS_INFORMATION
{
507 } KEY_WOW64_FLAGS_INFORMATION
, *PKEY_WOW64_FLAGS_INFORMATION
;
509 typedef struct _KEY_WRITE_TIME_INFORMATION
{
510 LARGE_INTEGER LastWriteTime
;
511 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
513 typedef enum _REG_NOTIFY_CLASS
{
515 RegNtPreDeleteKey
= RegNtDeleteKey
,
517 RegNtPreSetValueKey
= RegNtSetValueKey
,
519 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
520 RegNtSetInformationKey
,
521 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
523 RegNtPreRenameKey
= RegNtRenameKey
,
525 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
526 RegNtEnumerateValueKey
,
527 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
529 RegNtPreQueryKey
= RegNtQueryKey
,
531 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
532 RegNtQueryMultipleValueKey
,
533 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
539 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
541 RegNtPostSetValueKey
,
542 RegNtPostDeleteValueKey
,
543 RegNtPostSetInformationKey
,
545 RegNtPostEnumerateKey
,
546 RegNtPostEnumerateValueKey
,
548 RegNtPostQueryValueKey
,
549 RegNtPostQueryMultipleValueKey
,
550 RegNtPostKeyHandleClose
,
552 RegNtPostCreateKeyEx
,
561 RegNtPreQueryKeySecurity
,
562 RegNtPostQueryKeySecurity
,
563 RegNtPreSetKeySecurity
,
564 RegNtPostSetKeySecurity
,
565 RegNtCallbackObjectContextCleanup
,
573 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
576 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
577 IN PVOID CallbackContext
,
581 typedef struct _REG_DELETE_KEY_INFORMATION
{
586 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
587 #if (NTDDI_VERSION >= NTDDI_VISTA)
588 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
592 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
594 PUNICODE_STRING ValueName
;
602 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
604 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
606 PUNICODE_STRING ValueName
;
610 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
612 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
614 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
615 PVOID KeySetInformation
;
616 ULONG KeySetInformationLength
;
620 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
622 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
625 KEY_INFORMATION_CLASS KeyInformationClass
;
626 PVOID KeyInformation
;
632 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
634 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
637 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
638 PVOID KeyValueInformation
;
644 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
646 typedef struct _REG_QUERY_KEY_INFORMATION
{
648 KEY_INFORMATION_CLASS KeyInformationClass
;
649 PVOID KeyInformation
;
655 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
657 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
659 PUNICODE_STRING ValueName
;
660 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
661 PVOID KeyValueInformation
;
667 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
669 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
671 PKEY_VALUE_ENTRY ValueEntries
;
675 PULONG RequiredBufferLength
;
679 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
681 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
682 PUNICODE_STRING CompleteName
;
683 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
685 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
686 PUNICODE_STRING CompleteName
;
689 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
691 typedef struct _REG_POST_OPERATION_INFORMATION
{
694 PVOID PreInformation
;
695 NTSTATUS ReturnStatus
;
699 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
701 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
706 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;