2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/kd64/kddata.c
5 * PURPOSE: Contains all global variables and settings for KD64
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
9 /* INCLUDES ******************************************************************/
15 VOID NTAPI
RtlpBreakWithStatusInstruction(VOID
);
17 /* GLOBALS *******************************************************************/
22 KD_CONTEXT KdpContext
;
23 BOOLEAN KdpPortLocked
;
24 KSPIN_LOCK KdpDebuggerLock
;
25 BOOLEAN KdpControlCPressed
;
28 // Debug Trap Handlers
30 PKDEBUG_ROUTINE KiDebugRoutine
= KdpStub
;
31 PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine
;
34 // Debugger Configuration Settings
36 BOOLEAN KdBreakAfterSymbolLoad
;
37 BOOLEAN KdPitchDebugger
;
38 BOOLEAN _KdDebuggerNotPresent
;
39 BOOLEAN _KdDebuggerEnabled
;
40 BOOLEAN KdAutoEnableOnEvent
;
41 BOOLEAN KdPreviouslyEnabled
;
42 BOOLEAN KdpDebuggerStructuresInitialized
;
43 BOOLEAN KdEnteredDebugger
;
45 LARGE_INTEGER KdPerformanceCounterRate
;
50 BREAKPOINT_ENTRY KdpBreakpointTable
[20];
51 ULONG KdpBreakpointInstruction
= 0xCC;
52 BOOLEAN KdpOweBreakpoint
;
53 BOOLEAN BreakpointsSuspended
;
54 ULONG KdpNumInternalBreakpoints
;
56 ULONG KdpCurrentSymbolStart
, KdpCurrentSymbolEnd
;
61 ULONG TraceDataBuffer
[40];
62 ULONG TraceDataBufferPosition
= 1;
68 KTIMER KdpTimeSlipTimer
;
69 WORK_QUEUE_ITEM KdpTimeSlipWorkItem
;
70 LONG KdpTimeSlipPending
= 1;
71 PKEVENT KdpTimeSlipEvent
;
72 KSPIN_LOCK KdpTimeSlipEventLock
;
73 LARGE_INTEGER KdTimerStop
, KdTimerStart
, KdTimerDifference
;
78 CHAR KdpMessageBuffer
[4096];
79 CHAR KdpPathBuffer
[4096];
84 CHAR KdPrintDefaultCircularBuffer
[0x8000];
85 PCHAR KdPrintWritePointer
= KdPrintDefaultCircularBuffer
;
86 ULONG KdPrintRolloverCount
;
87 PCHAR KdPrintCircularBuffer
= KdPrintDefaultCircularBuffer
;
88 ULONG KdPrintBufferSize
= sizeof(KdPrintDefaultCircularBuffer
);
89 ULONG KdPrintBufferChanges
= 0;
94 ULONG Kd_WIN2000_Mask
= 1;
100 ULONG Kd_CRASHDUMP_Mask
;
101 ULONG Kd_CDAUDIO_Mask
;
103 ULONG Kd_CLASSPNP_Mask
;
105 ULONG Kd_REDBOOK_Mask
;
106 ULONG Kd_STORPROP_Mask
;
107 ULONG Kd_SCSIPORT_Mask
;
108 ULONG Kd_SCSIMINIPORT_Mask
;
109 ULONG Kd_CONFIG_Mask
;
110 ULONG Kd_I8042PRT_Mask
;
111 ULONG Kd_SERMOUSE_Mask
;
112 ULONG Kd_LSERMOUS_Mask
;
113 ULONG Kd_KBDHID_Mask
;
114 ULONG Kd_MOUHID_Mask
;
115 ULONG Kd_KBDCLASS_Mask
;
116 ULONG Kd_MOUCLASS_Mask
;
117 ULONG Kd_TWOTRACK_Mask
;
118 ULONG Kd_WMILIB_Mask
;
121 ULONG Kd_HALIA64_Mask
;
123 ULONG Kd_SVCHOST_Mask
;
124 ULONG Kd_VIDEOPRT_Mask
;
126 ULONG Kd_DMSYNTH_Mask
;
127 ULONG Kd_NTOSPNP_Mask
;
128 ULONG Kd_FASTFAT_Mask
;
130 ULONG Kd_PNPMGR_Mask
;
131 ULONG Kd_NETAPI_Mask
;
132 ULONG Kd_SCSERVER_Mask
;
133 ULONG Kd_SCCLIENT_Mask
;
134 ULONG Kd_SERIAL_Mask
;
135 ULONG Kd_SERENUM_Mask
;
137 ULONG Kd_RPCPROXY_Mask
;
138 ULONG Kd_AUTOCHK_Mask
;
139 ULONG Kd_DCOMSS_Mask
;
140 ULONG Kd_UNIMODEM_Mask
;
142 ULONG Kd_FLTMGR_Mask
;
143 ULONG Kd_WMICORE_Mask
;
144 ULONG Kd_BURNENG_Mask
;
147 ULONG Kd_FUSION_Mask
;
148 ULONG Kd_IDLETASK_Mask
;
149 ULONG Kd_SOFTPCI_Mask
;
153 ULONG Kd_PCIIDE_Mask
;
154 ULONG Kd_FLOPPY_Mask
;
156 ULONG Kd_TERMSRV_Mask
;
157 ULONG Kd_W32TIME_Mask
;
158 ULONG Kd_PREFETCHER_Mask
;
159 ULONG Kd_RSFILTER_Mask
;
160 ULONG Kd_FCPORT_Mask
;
163 ULONG Kd_DMCONFIG_Mask
;
164 ULONG Kd_DMADMIN_Mask
;
165 ULONG Kd_WSOCKTRANSPORT_Mask
;
167 ULONG Kd_PNPMEM_Mask
;
168 ULONG Kd_PROCESSOR_Mask
;
169 ULONG Kd_DMSERVER_Mask
;
171 ULONG Kd_INFINIBAND_Mask
;
172 ULONG Kd_IHVDRIVER_Mask
;
173 ULONG Kd_IHVVIDEO_Mask
;
174 ULONG Kd_IHVAUDIO_Mask
;
175 ULONG Kd_IHVNETWORK_Mask
;
176 ULONG Kd_IHVSTREAMING_Mask
;
177 ULONG Kd_IHVBUS_Mask
;
179 ULONG Kd_RTLTHREADPOOL_Mask
;
181 ULONG Kd_TCPIP6_Mask
;
182 ULONG Kd_ISAPNP_Mask
;
184 ULONG Kd_STORPORT_Mask
;
185 ULONG Kd_STORMINIPORT_Mask
;
186 ULONG Kd_PRINTSPOOLER_Mask
;
187 ULONG Kd_VSSDYNDISK_Mask
;
188 ULONG Kd_VERIFIER_Mask
;
190 ULONG Kd_VDSBAS_Mask
;
191 ULONG Kd_VDSDYNDR_Mask
;
192 ULONG Kd_VDSUTIL_Mask
;
193 ULONG Kd_DFRGIFC_Mask
;
194 ULONG Kd_DEFAULT_Mask
;
198 ULONG Kd_ENDOFTABLE_Mask
;
201 // Debug Filter Component Table
203 PULONG KdComponentTable
[104] =
218 &Kd_SCSIMINIPORT_Mask
,
275 &Kd_WSOCKTRANSPORT_Mask
,
286 &Kd_IHVSTREAMING_Mask
,
289 &Kd_RTLTHREADPOOL_Mask
,
295 &Kd_STORMINIPORT_Mask
,
296 &Kd_PRINTSPOOLER_Mask
,
311 ULONG KdComponentTableSize
= sizeof(KdComponentTable
);
316 LIST_ENTRY KdpDebuggerDataListHead
;
317 KSPIN_LOCK KdpDataSpinLock
;
320 // Debugger Version and Data Block
322 DBGKD_GET_VERSION64 KdVersionBlock
=
326 DBGKD_64BIT_PROTOCOL_VERSION2
,
327 CURRENT_KD_SECONDARY_VERSION
,
328 DBGKD_VERS_FLAG_DATA
,
330 IMAGE_FILE_MACHINE_I386
,
331 #elif defined (_M_AMD64)
332 IMAGE_FILE_MACHINE_AMD64
,
333 #elif defined(_M_PPC)
334 IMAGE_FILE_MACHINE_POWERPC
,
335 #elif defined(_M_MIPS)
336 IMAGE_FILE_MACHINE_R4000
,
338 #error Unknown platform
343 DBGKD_SIMULATION_NONE
,
349 KDDEBUGGER_DATA64 KdDebuggerDataBlock
=
353 {(ULONG_PTR
)RtlpBreakWithStatusInstruction
},
355 FIELD_OFFSET(KTHREAD
, CallbackStack
),
356 CBSTACK_CALLBACK_STACK
,
359 #elif defined (_M_AMD64)
362 #error Invalid architecture
365 {(ULONG_PTR
)KiCallUserMode
},
367 {(ULONG_PTR
)&PsLoadedModuleList
},
368 {(ULONG_PTR
)&PsActiveProcessHead
},
369 {(ULONG_PTR
)&PspCidTable
},
370 {(ULONG_PTR
)&ExpSystemResourcesList
},
371 {0}, // ExpPagedPoolDescriptor
372 {0}, // ExpNumberOfPagedPools
373 {(ULONG_PTR
)&KeTimeIncrement
},
374 {(ULONG_PTR
)&KeBugcheckCallbackListHead
},
375 {(ULONG_PTR
)KiBugCheckData
},
376 {(ULONG_PTR
)&IopErrorLogListHead
},
377 {(ULONG_PTR
)&ObpRootDirectoryObject
},
378 {(ULONG_PTR
)&ObpTypeObjectType
},
379 {0}, // MmSystemCacheStart
380 {0}, // MmSystemCacheEnd
381 {0}, // MmSystemCacheWs
382 {0}, // MmPfnDatabase
383 {0}, // MmSystemPtesStart
384 {0}, // MmSystemPtesEnd
385 {0}, // MmSubsectionBase
386 {0}, // MmNumberOfPagingFiles
387 {0}, // MmLowestPhysicalPage
388 {0}, // MmHighestPhysicalPage
389 {0}, // MmNumberOfPhysicalPages
390 {0}, // MmMaximumNonPagedPoolInBytes
391 {0}, // MmNonPagedSystemStart
392 {0}, // MmNonPagedPoolStart
393 {0}, // MmNonPagedPoolEnd
394 {0}, // MmPagedPoolStart
395 {0}, // MmPagedPoolEnd
396 {0}, // MmPagedPoolInfo
398 {0}, // MmSizeOfPagedPoolInBytes
399 {0}, // MmTotalCommitLimit
400 {0}, // MmTotalCommittedPages
401 {0}, // MmSharedCommit
402 {0}, // MmDriverCommit
403 {0}, // MmProcessCommit
404 {0}, // MmPagedPoolCommit
406 {0}, // MmZeroedPageListHead
407 {0}, // MmFreePageListHead
408 {0}, // MmStandbyPageListHead
409 {0}, // MmModifiedPageListHead
410 {0}, // MmModifiedNoWritePageListHead
411 {0}, // MmAvailablePages
412 {0}, // MmResidentAvailablePages
413 {0}, // PoolTrackTable
414 {0}, // NonPagedPoolDescriptor
415 {(ULONG_PTR
)&MmHighestUserAddress
},
416 {(ULONG_PTR
)&MmSystemRangeStart
},
417 {(ULONG_PTR
)&MmUserProbeAddress
},
418 {(ULONG_PTR
)KdPrintDefaultCircularBuffer
},
419 {(ULONG_PTR
)(KdPrintDefaultCircularBuffer
+ 1)},
420 {(ULONG_PTR
)&KdPrintWritePointer
},
421 {(ULONG_PTR
)&KdPrintRolloverCount
},
422 {0}, // MmLoadedUserImageList
423 {(ULONG_PTR
)&NtBuildLab
},
425 {(ULONG_PTR
)KiProcessorBlock
},
426 {0}, // MmUnloadedDrivers
427 {0}, // MmLastUnloadedDrivers
428 {0}, // MmTriageActionTaken
429 {0}, // MmSpecialPoolTag
430 {0}, // KernelVerifier
431 {0}, // MmVerifierData
432 {0}, // MmAllocatedNonPagedPool
433 {0}, // MmPeakCommitment
434 {0}, // MmtotalCommitLimitMaximum
435 {(ULONG_PTR
)&CmNtCSDVersion
},
436 {0}, // MmPhysicalMemoryBlock
437 {0}, // MmSessionBase
438 {0}, // MmSessionSize
441 FIELD_OFFSET(KTHREAD
, NextProcessor
),
442 FIELD_OFFSET(KTHREAD
, Teb
),
443 FIELD_OFFSET(KTHREAD
, KernelStack
),
444 FIELD_OFFSET(KTHREAD
, InitialStack
),
445 FIELD_OFFSET(KTHREAD
, ApcState
.Process
),
446 FIELD_OFFSET(KTHREAD
, State
),
450 FIELD_OFFSET(EPROCESS
, Peb
),
451 FIELD_OFFSET(EPROCESS
, InheritedFromUniqueProcessId
),
452 FIELD_OFFSET(EPROCESS
, Pcb
.DirectoryTableBase
),
454 FIELD_OFFSET(KPRCB
, DpcRoutineActive
),
455 FIELD_OFFSET(KPRCB
, CurrentThread
),
456 FIELD_OFFSET(KPRCB
, MHz
),
457 FIELD_OFFSET(KPRCB
, CpuType
),
458 FIELD_OFFSET(KPRCB
, VendorString
),
459 FIELD_OFFSET(KPRCB
, ProcessorState
.ContextFrame
),
460 FIELD_OFFSET(KPRCB
, Number
),
462 {(ULONG_PTR
)KdPrintDefaultCircularBuffer
},
463 {(ULONG_PTR
)&KdPrintBufferSize
},
464 {(ULONG_PTR
)&KeLoaderBlock
},
465 sizeof(KIPCR
) + sizeof(KPRCB
),
466 FIELD_OFFSET(KIPCR
, Self
),
468 FIELD_OFFSET(KPCR
, Prcb
),
469 #elif defined(_M_AMD64)
470 FIELD_OFFSET(KPCR
, CurrentPrcb
),
472 #error Invalid architecture
475 FIELD_OFFSET(KIPCR
, PrcbData
),
476 #elif defined(_M_AMD64)
477 FIELD_OFFSET(KIPCR
, Prcb
),
479 #error Invalid architecture
487 FIELD_OFFSET(KIPCR
, PrcbData
) +
488 FIELD_OFFSET(KPRCB
, ProcessorState
.SpecialRegisters
),
497 #elif defined(_M_AMD64)
498 FIELD_OFFSET(KIPCR
, Prcb
) +
499 FIELD_OFFSET(KPRCB
, ProcessorState
.SpecialRegisters
),
509 #error Invalid architecture
513 {0}, // IopNumTriagDumpDataBlocks
514 {0}, // IopTriageDumpDataBlocks