Geoff Chappell, Software Analyst
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 |