NTCONFIG.H

The public symbol file NTKRPAMP.PDB for the original release of Windows 10 tells that the kernel is built with the NTCONFIG.H header at

d:\th.public.fre\internal\sdk\inc

and draws from it the following type definitions:

Line Number Type WDM.H Remarks
249 enum _CM_SHARE_DISPOSITION 9465  
393 struct _CM_PARTIAL_RESOURCE_DESCRIPTOR 9603 loses 6
397 unnamed union for u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9607  
405 unnamed struct for Generic
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9615  
418 unnamed struct for Port
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9623 loses 5
430 unnamed struct for Interrupt
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9631 loses 4
446 unnamed struct for MessageInterrupt
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9647  
448 unnamed struct for Raw
in MessageInterrupt
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9649  
459 unnamed struct for Translated
in MessageInterrupt
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9660  
478 unnamed struct for Memory
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9679  
487 unnamed struct for Dma
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9688  
493 unnamed struct for DmaV3
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9694  
507 unnamed struct for DevicePrivate
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9708  
515 unnamed struct for BusNumber
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9716  
528 unnamed struct for DeviceSpecificData
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9729  
536 unnamed struct for Memory40
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9737  
541 unnamed struct for Memory48
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9742  
546 unnamed struct for Memory64
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9747  
551 unnamed struct for Connection
in u
in _CM_PARTIAL_RESOURCE_DESCRIPTOR
9752  
575 struct _CM_PARTIAL_RESOURCE_LIST 9776  
599 struct _CM_FULL_RESOURCE_DESCRIPTOR 9794 loses 6
610 struct _CM_RESOURCE_LIST 9805  
1135 enum _IRQ_PRIORITY 10296 loses 34
1155 struct _IO_RESOURCE_DESCRIPTOR 10316  
1163 unnamed union for  u
in _IO_RESOURCE_DESCRIPTOR
10324  
1164 unnamed struct for Port
in u
in _IO_RESOURCE_DESCRIPTOR
10325  
1171 unnamed struct for Memory
in u
in _IO_RESOURCE_DESCRIPTOR
10332  
1178 unnamed struct for Interrupt
in u
in _IO_RESOURCE_DESCRIPTOR
10339  
1191 unnamed struct for Dma
in u
in _IO_RESOURCE_DESCRIPTOR
10352  
1196 unnamed struct for DmaV3
in u
in _IO_RESOURCE_DESCRIPTOR
10357  
1203 unnamed struct for Generic
in u
in _IO_RESOURCE_DESCRIPTOR
10364  
1210 unnamed struct for DevicePrivate
in u
in _IO_RESOURCE_DESCRIPTOR
10371  
1218 unnamed struct for BusNumber
in u
in _IO_RESOURCE_DESCRIPTOR
10379  
1225 unnamed struct for ConfigData
in u
in _IO_RESOURCE_DESCRIPTOR
10386  
1236 unnamed struct for Memory40
in u
in _IO_RESOURCE_DESCRIPTOR
10397  
1243 unnamed struct for Memory48
in u
in _IO_RESOURCE_DESCRIPTOR
10404  
1250 unnamed struct for Memory64
in u
in _IO_RESOURCE_DESCRIPTOR
10411  
1257 unnamed struct for Connection
in u
in _IO_RESOURCE_DESCRIPTOR
10418  
1271 struct _IO_RESOURCE_LIST 10432  
1280 struct _IO_RESOURCE_REQUIREMENTS_LIST 10441  

The header NTCONFIG.H is not known in any Device Driver Kit (DDK) or Windows Driver Kit (WDK).

That said, all the types that the kernel is known to pick up from NTCONFIG.H are defined in the standard header WDM.H. The line numbers on the left are from NTCONFIG.H, as inferred from the public symbol file for the kernel. Those on the right are from WDM.H, as readily available in the WDK for Windows 10. It is not known whether NTCONFIG.H is the source of definitions in WDM.H or whether both pick them up from yet another header.

What is clear, though, is that WDM.H is a consistent loser of lines. NTCONFIG.H, which Microsoft keeps to itself, has more of this material than does WDM.H. What the extra is, let alone whether it’s important, is not easily assessed without an NTCONFIG.H for inspection, but one inference that’s possible seems sound. Given that the type information for the CM_PARTIAL_RESOURCE_DESCRIPTOR in the symbol file is what the kernel used from NTCONFIG.H, then since it agrees with the definition in WDM.H, the definition in NTCONFIG.H can’t differ in substance. Its five extra lines between the Generic and Port members and four between Port and Interrupt are plausibly just comments. Of course, this does prompt a question: what does Microsoft have to say by way of introducing Port and Interrupt that should be known by its own programmers but not by others?

For the record, Microsoft’s freely published URLMON.PDB reveals that all the preceding, and the very many more that follow, were accessible to the source code for URLMON.DLL from including NTCONFIG.H when building for the original release of 32-bit Windows 10:

Line Number Type
627 struct _DEVICE_FLAGS
641 struct _CM_COMPONENT_INFORMATION
662 struct _CM_ROM_BLOCK
677 struct _CM_INT13_DRIVER_PARAMETER
691 struct _CM_MCA_POS_DATA
703 struct _EISA_MEMORY_TYPE
713 struct _EISA_MEMORY_CONFIGURATION
726 struct _EISA_IRQ_DESCRIPTOR
734 struct _EISA_IRQ_CONFIGURATION
744 struct _DMA_CONFIGURATION_BYTE0
751 struct _DMA_CONFIGURATION_BYTE1
758 struct _EISA_DMA_CONFIGURATION
768 struct _EISA_PORT_DESCRIPTOR
775 struct _EISA_PORT_CONFIGURATION
787 struct _CM_EISA_SLOT_INFORMATION
803 struct _CM_EISA_FUNCTION_INFORMATION
837 struct _CM_PNP_BIOS_DEVICE_NODE
851 struct _CM_PNP_BIOS_INSTALLATION_CHECK
920 struct _CM_SCSI_DEVICE_DATA
934 struct _CM_VIDEO_DEVICE_DATA
944 struct _CM_SONIC_DEVICE_DATA
955 struct _CM_SERIAL_DEVICE_DATA
969 struct _CM_MONITOR_DEVICE_DATA
1003 struct _CM_FLOPPY_DEVICE_DATA
1040 struct _CM_KEYBOARD_DEVICE_DATA
1052 struct _CM_DISK_GEOMETRY_DEVICE_DATA
1065 struct _CM_PCCARD_DEVICE_DATA
1120 enum _IRQ_DEVICE_POLICY
1146 enum _IRQ_GROUP_POLICY