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 /* Key creation/open disposition */
93 #define REG_CREATED_NEW_KEY (0x00000001L)
94 #define REG_OPENED_EXISTING_KEY (0x00000002L)
96 /* Key restore & hive load flags */
97 #define REG_WHOLE_HIVE_VOLATILE (0x00000001L)
98 #define REG_REFRESH_HIVE (0x00000002L)
99 #define REG_NO_LAZY_FLUSH (0x00000004L)
100 #define REG_FORCE_RESTORE (0x00000008L)
101 #define REG_APP_HIVE (0x00000010L)
102 #define REG_PROCESS_PRIVATE (0x00000020L)
103 #define REG_START_JOURNAL (0x00000040L)
104 #define REG_HIVE_EXACT_FILE_GROWTH (0x00000080L)
105 #define REG_HIVE_NO_RM (0x00000100L)
106 #define REG_HIVE_SINGLE_LOG (0x00000200L)
109 #define REG_FORCE_UNLOAD 1
111 /* Notify Filter Values */
112 #define REG_NOTIFY_CHANGE_NAME (0x00000001L)
113 #define REG_NOTIFY_CHANGE_ATTRIBUTES (0x00000002L)
114 #define REG_NOTIFY_CHANGE_LAST_SET (0x00000004L)
115 #define REG_NOTIFY_CHANGE_SECURITY (0x00000008L)
117 #define REG_LEGAL_CHANGE_FILTER \
118 (REG_NOTIFY_CHANGE_NAME |\
119 REG_NOTIFY_CHANGE_ATTRIBUTES |\
120 REG_NOTIFY_CHANGE_LAST_SET |\
121 REG_NOTIFY_CHANGE_SECURITY)
123 typedef struct _CM_FLOPPY_DEVICE_DATA
{
129 UCHAR StepRateHeadUnloadTime
;
132 UCHAR SectorLengthCode
;
133 UCHAR SectorPerTrack
;
134 UCHAR ReadWriteGapLength
;
135 UCHAR DataTransferLength
;
136 UCHAR FormatGapLength
;
137 UCHAR FormatFillCharacter
;
138 UCHAR HeadSettleTime
;
139 UCHAR MotorSettleTime
;
140 UCHAR MaximumTrackValue
;
141 UCHAR DataTransferRate
;
142 } CM_FLOPPY_DEVICE_DATA
, *PCM_FLOPPY_DEVICE_DATA
;
144 #include <pshpack4.h>
145 typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
147 UCHAR ShareDisposition
;
151 PHYSICAL_ADDRESS Start
;
155 PHYSICAL_ADDRESS Start
;
159 #if defined(NT_PROCESSOR_GROUPS)
168 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
170 __GNU_EXTENSION
union {
172 #if defined(NT_PROCESSOR_GROUPS)
182 #if defined(NT_PROCESSOR_GROUPS)
195 PHYSICAL_ADDRESS Start
;
215 } DeviceSpecificData
;
216 #if (NTDDI_VERSION >= NTDDI_LONGHORN)
218 PHYSICAL_ADDRESS Start
;
222 PHYSICAL_ADDRESS Start
;
226 PHYSICAL_ADDRESS Start
;
231 } CM_PARTIAL_RESOURCE_DESCRIPTOR
, *PCM_PARTIAL_RESOURCE_DESCRIPTOR
;
234 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Type */
235 #define CmResourceTypeNull 0
236 #define CmResourceTypePort 1
237 #define CmResourceTypeInterrupt 2
238 #define CmResourceTypeMemory 3
239 #define CmResourceTypeDma 4
240 #define CmResourceTypeDeviceSpecific 5
241 #define CmResourceTypeBusNumber 6
242 #define CmResourceTypeMemoryLarge 7
243 #define CmResourceTypeNonArbitrated 128
244 #define CmResourceTypeConfigData 128
245 #define CmResourceTypeDevicePrivate 129
246 #define CmResourceTypePcCardConfig 130
247 #define CmResourceTypeMfCardConfig 131
249 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.ShareDisposition */
250 typedef enum _CM_SHARE_DISPOSITION
{
251 CmResourceShareUndetermined
,
252 CmResourceShareDeviceExclusive
,
253 CmResourceShareDriverExclusive
,
254 CmResourceShareShared
255 } CM_SHARE_DISPOSITION
;
257 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypePort */
258 #define CM_RESOURCE_PORT_MEMORY 0x0000
259 #define CM_RESOURCE_PORT_IO 0x0001
260 #define CM_RESOURCE_PORT_10_BIT_DECODE 0x0004
261 #define CM_RESOURCE_PORT_12_BIT_DECODE 0x0008
262 #define CM_RESOURCE_PORT_16_BIT_DECODE 0x0010
263 #define CM_RESOURCE_PORT_POSITIVE_DECODE 0x0020
264 #define CM_RESOURCE_PORT_PASSIVE_DECODE 0x0040
265 #define CM_RESOURCE_PORT_WINDOW_DECODE 0x0080
266 #define CM_RESOURCE_PORT_BAR 0x0100
268 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeInterrupt */
269 #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000
270 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001
271 #define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002
272 #define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004
274 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeMemory */
275 #define CM_RESOURCE_MEMORY_READ_WRITE 0x0000
276 #define CM_RESOURCE_MEMORY_READ_ONLY 0x0001
277 #define CM_RESOURCE_MEMORY_WRITE_ONLY 0x0002
278 #define CM_RESOURCE_MEMORY_WRITEABILITY_MASK 0x0003
279 #define CM_RESOURCE_MEMORY_PREFETCHABLE 0x0004
280 #define CM_RESOURCE_MEMORY_COMBINEDWRITE 0x0008
281 #define CM_RESOURCE_MEMORY_24 0x0010
282 #define CM_RESOURCE_MEMORY_CACHEABLE 0x0020
283 #define CM_RESOURCE_MEMORY_WINDOW_DECODE 0x0040
284 #define CM_RESOURCE_MEMORY_BAR 0x0080
285 #define CM_RESOURCE_MEMORY_COMPAT_FOR_INACCESSIBLE_RANGE 0x0100
287 /* CM_PARTIAL_RESOURCE_DESCRIPTOR.Flags if Type = CmResourceTypeDma */
288 #define CM_RESOURCE_DMA_8 0x0000
289 #define CM_RESOURCE_DMA_16 0x0001
290 #define CM_RESOURCE_DMA_32 0x0002
291 #define CM_RESOURCE_DMA_8_AND_16 0x0004
292 #define CM_RESOURCE_DMA_BUS_MASTER 0x0008
293 #define CM_RESOURCE_DMA_TYPE_A 0x0010
294 #define CM_RESOURCE_DMA_TYPE_B 0x0020
295 #define CM_RESOURCE_DMA_TYPE_F 0x0040
297 typedef struct _CM_PARTIAL_RESOURCE_LIST
{
301 CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors
[1];
302 } CM_PARTIAL_RESOURCE_LIST
, *PCM_PARTIAL_RESOURCE_LIST
;
304 typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
305 INTERFACE_TYPE InterfaceType
;
307 CM_PARTIAL_RESOURCE_LIST PartialResourceList
;
308 } CM_FULL_RESOURCE_DESCRIPTOR
, *PCM_FULL_RESOURCE_DESCRIPTOR
;
310 typedef struct _CM_RESOURCE_LIST
{
312 CM_FULL_RESOURCE_DESCRIPTOR List
[1];
313 } CM_RESOURCE_LIST
, *PCM_RESOURCE_LIST
;
315 #include <pshpack1.h>
316 typedef struct _CM_INT13_DRIVE_PARAMETER
{
319 USHORT SectorsPerTrack
;
322 } CM_INT13_DRIVE_PARAMETER
, *PCM_INT13_DRIVE_PARAMETER
;
324 typedef struct _CM_PNP_BIOS_DEVICE_NODE
{
329 USHORT DeviceAttributes
;
330 } CM_PNP_BIOS_DEVICE_NODE
,*PCM_PNP_BIOS_DEVICE_NODE
;
332 typedef struct _CM_PNP_BIOS_INSTALLATION_CHECK
{
338 ULONG EventFlagAddress
;
339 USHORT RealModeEntryOffset
;
340 USHORT RealModeEntrySegment
;
341 USHORT ProtectedModeEntryOffset
;
342 ULONG ProtectedModeCodeBaseAddress
;
344 USHORT RealModeDataBaseAddress
;
345 ULONG ProtectedModeDataBaseAddress
;
346 } CM_PNP_BIOS_INSTALLATION_CHECK
, *PCM_PNP_BIOS_INSTALLATION_CHECK
;
349 typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA
{
350 ULONG BytesPerSector
;
351 ULONG NumberOfCylinders
;
352 ULONG SectorsPerTrack
;
354 } CM_DISK_GEOMETRY_DEVICE_DATA
, *PCM_DISK_GEOMETRY_DEVICE_DATA
;
356 typedef struct _CM_KEYBOARD_DEVICE_DATA
{
361 USHORT KeyboardFlags
;
362 } CM_KEYBOARD_DEVICE_DATA
, *PCM_KEYBOARD_DEVICE_DATA
;
364 typedef struct _CM_MCA_POS_DATA
{
370 } CM_MCA_POS_DATA
, *PCM_MCA_POS_DATA
;
372 #if (NTDDI_VERSION >= NTDDI_WINXP)
373 typedef struct CM_Power_Data_s
{
375 DEVICE_POWER_STATE PD_MostRecentPowerState
;
376 ULONG PD_Capabilities
;
380 DEVICE_POWER_STATE PD_PowerStateMapping
[PowerSystemMaximum
];
381 SYSTEM_POWER_STATE PD_DeepestSystemWake
;
382 } CM_POWER_DATA
, *PCM_POWER_DATA
;
384 #define PDCAP_D0_SUPPORTED 0x00000001
385 #define PDCAP_D1_SUPPORTED 0x00000002
386 #define PDCAP_D2_SUPPORTED 0x00000004
387 #define PDCAP_D3_SUPPORTED 0x00000008
388 #define PDCAP_WAKE_FROM_D0_SUPPORTED 0x00000010
389 #define PDCAP_WAKE_FROM_D1_SUPPORTED 0x00000020
390 #define PDCAP_WAKE_FROM_D2_SUPPORTED 0x00000040
391 #define PDCAP_WAKE_FROM_D3_SUPPORTED 0x00000080
392 #define PDCAP_WARM_EJECT_SUPPORTED 0x00000100
394 #endif /* (NTDDI_VERSION >= NTDDI_WINXP) */
396 typedef struct _CM_SCSI_DEVICE_DATA
{
399 UCHAR HostIdentifier
;
400 } CM_SCSI_DEVICE_DATA
, *PCM_SCSI_DEVICE_DATA
;
402 typedef struct _CM_SERIAL_DEVICE_DATA
{
406 } CM_SERIAL_DEVICE_DATA
, *PCM_SERIAL_DEVICE_DATA
;
408 typedef enum _KEY_INFORMATION_CLASS
{
413 KeyCachedInformation
,
415 } KEY_INFORMATION_CLASS
;
417 typedef struct _KEY_BASIC_INFORMATION
{
418 LARGE_INTEGER LastWriteTime
;
422 } KEY_BASIC_INFORMATION
, *PKEY_BASIC_INFORMATION
;
424 typedef struct _KEY_FULL_INFORMATION
{
425 LARGE_INTEGER LastWriteTime
;
433 ULONG MaxValueNameLen
;
434 ULONG MaxValueDataLen
;
436 } KEY_FULL_INFORMATION
, *PKEY_FULL_INFORMATION
;
438 typedef struct _KEY_NODE_INFORMATION
{
439 LARGE_INTEGER LastWriteTime
;
445 } KEY_NODE_INFORMATION
, *PKEY_NODE_INFORMATION
;
447 typedef struct _KEY_VALUE_BASIC_INFORMATION
{
452 } KEY_VALUE_BASIC_INFORMATION
, *PKEY_VALUE_BASIC_INFORMATION
;
454 typedef struct _KEY_VALUE_FULL_INFORMATION
{
461 } KEY_VALUE_FULL_INFORMATION
, *PKEY_VALUE_FULL_INFORMATION
;
463 typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
468 } KEY_VALUE_PARTIAL_INFORMATION
, *PKEY_VALUE_PARTIAL_INFORMATION
;
470 typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
{
474 } KEY_VALUE_PARTIAL_INFORMATION_ALIGN64
, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64
;
476 typedef struct _KEY_VALUE_ENTRY
{
477 PUNICODE_STRING ValueName
;
481 } KEY_VALUE_ENTRY
, *PKEY_VALUE_ENTRY
;
483 typedef enum _KEY_VALUE_INFORMATION_CLASS
{
484 KeyValueBasicInformation
,
485 KeyValueFullInformation
,
486 KeyValuePartialInformation
,
487 KeyValueFullInformationAlign64
,
488 KeyValuePartialInformationAlign64
489 } KEY_VALUE_INFORMATION_CLASS
;
491 typedef struct _KEY_WRITE_TIME_INFORMATION
{
492 LARGE_INTEGER LastWriteTime
;
493 } KEY_WRITE_TIME_INFORMATION
, *PKEY_WRITE_TIME_INFORMATION
;
495 typedef enum _KEY_SET_INFORMATION_CLASS
{
496 KeyWriteTimeInformation
,
497 KeyWow64FlagsInformation
,
498 KeyControlFlagsInformation
,
499 KeySetVirtualizationInformation
,
500 KeySetDebugInformation
,
501 KeySetHandleTagsInformation
,
503 } KEY_SET_INFORMATION_CLASS
;
505 typedef enum _REG_NOTIFY_CLASS
{
507 RegNtPreDeleteKey
= RegNtDeleteKey
,
509 RegNtPreSetValueKey
= RegNtSetValueKey
,
511 RegNtPreDeleteValueKey
= RegNtDeleteValueKey
,
512 RegNtSetInformationKey
,
513 RegNtPreSetInformationKey
= RegNtSetInformationKey
,
515 RegNtPreRenameKey
= RegNtRenameKey
,
517 RegNtPreEnumerateKey
= RegNtEnumerateKey
,
518 RegNtEnumerateValueKey
,
519 RegNtPreEnumerateValueKey
= RegNtEnumerateValueKey
,
521 RegNtPreQueryKey
= RegNtQueryKey
,
523 RegNtPreQueryValueKey
= RegNtQueryValueKey
,
524 RegNtQueryMultipleValueKey
,
525 RegNtPreQueryMultipleValueKey
= RegNtQueryMultipleValueKey
,
531 RegNtPreKeyHandleClose
= RegNtKeyHandleClose
,
533 RegNtPostSetValueKey
,
534 RegNtPostDeleteValueKey
,
535 RegNtPostSetInformationKey
,
537 RegNtPostEnumerateKey
,
538 RegNtPostEnumerateValueKey
,
540 RegNtPostQueryValueKey
,
541 RegNtPostQueryMultipleValueKey
,
542 RegNtPostKeyHandleClose
,
544 RegNtPostCreateKeyEx
,
553 RegNtPreQueryKeySecurity
,
554 RegNtPostQueryKeySecurity
,
555 RegNtPreSetKeySecurity
,
556 RegNtPostSetKeySecurity
,
557 RegNtCallbackObjectContextCleanup
,
565 } REG_NOTIFY_CLASS
, *PREG_NOTIFY_CLASS
;
568 (NTAPI
*PEX_CALLBACK_FUNCTION
)(
569 IN PVOID CallbackContext
,
573 typedef struct _REG_DELETE_KEY_INFORMATION
{
578 } REG_DELETE_KEY_INFORMATION
, *PREG_DELETE_KEY_INFORMATION
579 #if (NTDDI_VERSION >= NTDDI_VISTA)
580 , REG_FLUSH_KEY_INFORMATION
, *PREG_FLUSH_KEY_INFORMATION
584 typedef struct _REG_SET_VALUE_KEY_INFORMATION
{
586 PUNICODE_STRING ValueName
;
594 } REG_SET_VALUE_KEY_INFORMATION
, *PREG_SET_VALUE_KEY_INFORMATION
;
596 typedef struct _REG_DELETE_VALUE_KEY_INFORMATION
{
598 PUNICODE_STRING ValueName
;
602 } REG_DELETE_VALUE_KEY_INFORMATION
, *PREG_DELETE_VALUE_KEY_INFORMATION
;
604 typedef struct _REG_SET_INFORMATION_KEY_INFORMATION
{
606 KEY_SET_INFORMATION_CLASS KeySetInformationClass
;
607 PVOID KeySetInformation
;
608 ULONG KeySetInformationLength
;
612 } REG_SET_INFORMATION_KEY_INFORMATION
, *PREG_SET_INFORMATION_KEY_INFORMATION
;
614 typedef struct _REG_ENUMERATE_KEY_INFORMATION
{
617 KEY_INFORMATION_CLASS KeyInformationClass
;
618 PVOID KeyInformation
;
624 } REG_ENUMERATE_KEY_INFORMATION
, *PREG_ENUMERATE_KEY_INFORMATION
;
626 typedef struct _REG_ENUMERATE_VALUE_KEY_INFORMATION
{
629 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
630 PVOID KeyValueInformation
;
636 } REG_ENUMERATE_VALUE_KEY_INFORMATION
, *PREG_ENUMERATE_VALUE_KEY_INFORMATION
;
638 typedef struct _REG_QUERY_KEY_INFORMATION
{
640 KEY_INFORMATION_CLASS KeyInformationClass
;
641 PVOID KeyInformation
;
647 } REG_QUERY_KEY_INFORMATION
, *PREG_QUERY_KEY_INFORMATION
;
649 typedef struct _REG_QUERY_VALUE_KEY_INFORMATION
{
651 PUNICODE_STRING ValueName
;
652 KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass
;
653 PVOID KeyValueInformation
;
659 } REG_QUERY_VALUE_KEY_INFORMATION
, *PREG_QUERY_VALUE_KEY_INFORMATION
;
661 typedef struct _REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
{
663 PKEY_VALUE_ENTRY ValueEntries
;
667 PULONG RequiredBufferLength
;
671 } REG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
, *PREG_QUERY_MULTIPLE_VALUE_KEY_INFORMATION
;
673 typedef struct _REG_PRE_CREATE_KEY_INFORMATION
{
674 PUNICODE_STRING CompleteName
;
675 } REG_PRE_CREATE_KEY_INFORMATION
, REG_PRE_OPEN_KEY_INFORMATION
,*PREG_PRE_CREATE_KEY_INFORMATION
, *PREG_PRE_OPEN_KEY_INFORMATION
;;
677 typedef struct _REG_POST_CREATE_KEY_INFORMATION
{
678 PUNICODE_STRING CompleteName
;
681 } REG_POST_CREATE_KEY_INFORMATION
,REG_POST_OPEN_KEY_INFORMATION
, *PREG_POST_CREATE_KEY_INFORMATION
, *PREG_POST_OPEN_KEY_INFORMATION
;
683 typedef struct _REG_POST_OPERATION_INFORMATION
{
686 PVOID PreInformation
;
687 NTSTATUS ReturnStatus
;
691 } REG_POST_OPERATION_INFORMATION
,*PREG_POST_OPERATION_INFORMATION
;
693 typedef struct _REG_KEY_HANDLE_CLOSE_INFORMATION
{
698 } REG_KEY_HANDLE_CLOSE_INFORMATION
, *PREG_KEY_HANDLE_CLOSE_INFORMATION
;