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 NTAMD64_X.H header at
d:\th.public.fre\internal\sdk\inc
and draws from it the following type definition:
Line Number | Type | NTDDK.H |
---|---|---|
1374 | struct _CONTEXT | 551 |
The header NTAMD64_X.H is not known in any Device Driver Kit (DDK) or Windows Driver Kit (WDK), but this one type that the kernel is known to pick up from it is defined in the standard header NTDDK.H. The line number on the left is from the unseen NTAMD64_X.H but is known from the symbol file. The line number on the right is from the NTDDK.H that is readily available in the WDK for Windows 10.
From URLMON.PDB:
Line Number | Type |
---|---|
28 | struct _SCOPE_TABLE_AMD64 |
1374 | struct _CONTEXT |
1578 | struct _UNWIND_HISTORY_TABLE_ENTRY |
1583 | struct _UNWIND_HISTORY_TABLE |
1625 | struct _DISPATCHER_CONTEXT |
Though the public symbol files for the kernel make no mention of it, there is an NTAMD64.H in the same directory. This is known from private symbol files that Microsoft has distributed in packages of otherwise public symbol files. All these private symbols are for user-mode modules. Some, such as URLMON.DLL from Internet Explorer, are very far removed from kernel-mode programming, but let’s leave that wonder for some other time. If NTAMD64.H for the amd64 processor architecture follows the pattern of NTARM.H and NTARM_X.H, then NTAMD64.H includes NTAMD64_X.H. It’s not impossible, and may even be likely, that the kernel’s source code includes NTAMD64.H but just doesn’t use any of its contents in a way that survives into the public symbol files.
Line Number | Type |
---|---|
83 | enum _DEBUG_CONTROL_SPACE_ITEM |
129 | enum _UNWIND_OP_CODES |
147 | union _UNWIND_CODE |
157 | unnamed struct for EpilogueCode in _UNWIND_CODE |
167 | struct _UNWIND_INFO |