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 KdpControlCPressed
;
24 BOOLEAN KdpControlCWaiting
;
25 BOOLEAN KdpPortLocked
;
26 KSPIN_LOCK KdpDebuggerLock
;
29 // Debug Trap Handlers
31 PKDEBUG_ROUTINE KiDebugRoutine
= KdpStub
;
32 PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine
;
35 // Debugger Configuration Settings
37 BOOLEAN KdBreakAfterSymbolLoad
;
38 BOOLEAN KdPitchDebugger
;
39 BOOLEAN _KdDebuggerNotPresent
;
40 BOOLEAN _KdDebuggerEnabled
;
41 BOOLEAN KdAutoEnableOnEvent
;
42 BOOLEAN KdPreviouslyEnabled
;
43 BOOLEAN KdpDebuggerStructuresInitialized
;
44 BOOLEAN KdEnteredDebugger
;
46 LARGE_INTEGER KdPerformanceCounterRate
;
51 BREAKPOINT_ENTRY KdpBreakpointTable
[20];
52 ULONG KdpBreakpointInstruction
= 0xCC;
53 BOOLEAN KdpOweBreakpoint
;
54 BOOLEAN BreakpointsSuspended
;
60 KTIMER KdpTimeSlipTimer
;
61 WORK_QUEUE_ITEM KdpTimeSlipWorkItem
;
62 LONG KdpTimeSlipPending
= 1;
63 PKEVENT KdpTimeSlipEvent
;
64 KSPIN_LOCK KdpTimeSlipEventLock
;
65 LARGE_INTEGER KdTimerStop
, KdTimerStart
, KdTimerDifference
;
70 CHAR KdpMessageBuffer
[4096];
71 CHAR KdpPathBuffer
[4096];
76 CHAR KdPrintDefaultCircularBuffer
[0x8000];
77 PCHAR KdPrintWritePointer
= KdPrintDefaultCircularBuffer
;
78 ULONG KdPrintRolloverCount
;
79 PCHAR KdPrintCircularBuffer
= KdPrintDefaultCircularBuffer
;
80 ULONG KdPrintBufferSize
= sizeof(KdPrintDefaultCircularBuffer
);
81 ULONG KdPrintBufferChanges
= 0;
86 ULONG Kd_WIN2000_Mask
= 1;
92 ULONG Kd_CRASHDUMP_Mask
;
93 ULONG Kd_CDAUDIO_Mask
;
95 ULONG Kd_CLASSPNP_Mask
;
97 ULONG Kd_REDBOOK_Mask
;
98 ULONG Kd_STORPROP_Mask
;
99 ULONG Kd_SCSIPORT_Mask
;
100 ULONG Kd_SCSIMINIPORT_Mask
;
101 ULONG Kd_CONFIG_Mask
;
102 ULONG Kd_I8042PRT_Mask
;
103 ULONG Kd_SERMOUSE_Mask
;
104 ULONG Kd_LSERMOUS_Mask
;
105 ULONG Kd_KBDHID_Mask
;
106 ULONG Kd_MOUHID_Mask
;
107 ULONG Kd_KBDCLASS_Mask
;
108 ULONG Kd_MOUCLASS_Mask
;
109 ULONG Kd_TWOTRACK_Mask
;
110 ULONG Kd_WMILIB_Mask
;
113 ULONG Kd_HALIA64_Mask
;
115 ULONG Kd_SVCHOST_Mask
;
116 ULONG Kd_VIDEOPRT_Mask
;
118 ULONG Kd_DMSYNTH_Mask
;
119 ULONG Kd_NTOSPNP_Mask
;
120 ULONG Kd_FASTFAT_Mask
;
122 ULONG Kd_PNPMGR_Mask
;
123 ULONG Kd_NETAPI_Mask
;
124 ULONG Kd_SCSERVER_Mask
;
125 ULONG Kd_SCCLIENT_Mask
;
126 ULONG Kd_SERIAL_Mask
;
127 ULONG Kd_SERENUM_Mask
;
129 ULONG Kd_RPCPROXY_Mask
;
130 ULONG Kd_AUTOCHK_Mask
;
131 ULONG Kd_DCOMSS_Mask
;
132 ULONG Kd_UNIMODEM_Mask
;
134 ULONG Kd_FLTMGR_Mask
;
135 ULONG Kd_WMICORE_Mask
;
136 ULONG Kd_BURNENG_Mask
;
139 ULONG Kd_FUSION_Mask
;
140 ULONG Kd_IDLETASK_Mask
;
141 ULONG Kd_SOFTPCI_Mask
;
145 ULONG Kd_PCIIDE_Mask
;
146 ULONG Kd_FLOPPY_Mask
;
148 ULONG Kd_TERMSRV_Mask
;
149 ULONG Kd_W32TIME_Mask
;
150 ULONG Kd_PREFETCHER_Mask
;
151 ULONG Kd_RSFILTER_Mask
;
152 ULONG Kd_FCPORT_Mask
;
155 ULONG Kd_DMCONFIG_Mask
;
156 ULONG Kd_DMADMIN_Mask
;
157 ULONG Kd_WSOCKTRANSPORT_Mask
;
159 ULONG Kd_PNPMEM_Mask
;
160 ULONG Kd_PROCESSOR_Mask
;
161 ULONG Kd_DMSERVER_Mask
;
163 ULONG Kd_INFINIBAND_Mask
;
164 ULONG Kd_IHVDRIVER_Mask
;
165 ULONG Kd_IHVVIDEO_Mask
;
166 ULONG Kd_IHVAUDIO_Mask
;
167 ULONG Kd_IHVNETWORK_Mask
;
168 ULONG Kd_IHVSTREAMING_Mask
;
169 ULONG Kd_IHVBUS_Mask
;
171 ULONG Kd_RTLTHREADPOOL_Mask
;
173 ULONG Kd_TCPIP6_Mask
;
174 ULONG Kd_ISAPNP_Mask
;
176 ULONG Kd_STORPORT_Mask
;
177 ULONG Kd_STORMINIPORT_Mask
;
178 ULONG Kd_PRINTSPOOLER_Mask
;
179 ULONG Kd_VSSDYNDISK_Mask
;
180 ULONG Kd_VERIFIER_Mask
;
182 ULONG Kd_VDSBAS_Mask
;
183 ULONG Kd_VDSDYNDR_Mask
;
184 ULONG Kd_VDSUTIL_Mask
;
185 ULONG Kd_DFRGIFC_Mask
;
186 ULONG Kd_DEFAULT_Mask
;
190 ULONG Kd_ENDOFTABLE_Mask
;
193 // Debug Filter Component Table
195 PULONG KdComponentTable
[104] =
210 &Kd_SCSIMINIPORT_Mask
,
267 &Kd_WSOCKTRANSPORT_Mask
,
278 &Kd_IHVSTREAMING_Mask
,
281 &Kd_RTLTHREADPOOL_Mask
,
287 &Kd_STORMINIPORT_Mask
,
288 &Kd_PRINTSPOOLER_Mask
,
303 ULONG KdComponentTableSize
= sizeof(KdComponentTable
);
308 LIST_ENTRY KdpDebuggerDataListHead
;
309 KSPIN_LOCK KdpDataSpinLock
;
312 // Debugger Version and Data Block
314 DBGKD_GET_VERSION64 KdVersionBlock
=
318 DBGKD_64BIT_PROTOCOL_VERSION2
,
319 KD_SECONDARY_VERSION_DEFAULT
,
320 DBGKD_VERS_FLAG_DATA
,
321 IMAGE_FILE_MACHINE_I386
,
325 DBGKD_SIMULATION_NONE
,
331 KDDEBUGGER_DATA64 KdDebuggerDataBlock
=
335 {PtrToUlong(RtlpBreakWithStatusInstruction
)},
337 FIELD_OFFSET(KTHREAD
, CallbackStack
),
338 CBSTACK_CALLBACK_STACK
,
341 {PtrToUlong(KiCallUserMode
)},
343 {PtrToUlong(&PsLoadedModuleList
)},
344 {PtrToUlong(&PsActiveProcessHead
)},
345 {PtrToUlong(&PspCidTable
)},
346 {PtrToUlong(&ExpSystemResourcesList
)},
347 {0}, // ExpPagedPoolDescriptor
348 {0}, // ExpNumberOfPagedPools
349 {PtrToUlong(&KeTimeIncrement
)},
350 {PtrToUlong(&KeBugcheckCallbackListHead
)},
351 {PtrToUlong(KiBugCheckData
)},
352 {PtrToUlong(&IopErrorLogListHead
)},
353 {PtrToUlong(&ObpRootDirectoryObject
)},
354 {PtrToUlong(&ObpTypeObjectType
)},
355 {0}, // MmSystemCacheStart
356 {0}, // MmSystemCacheEnd
357 {0}, // MmSystemCacheWs
358 {0}, // MmPfnDatabase
359 {0}, // MmSystemPtesStart
360 {0}, // MmSystemPtesEnd
361 {0}, // MmSubsectionBase
362 {0}, // MmNumberOfPagingFiles
363 {0}, // MmLowestPhysicalPage
364 {0}, // MmHighestPhysicalPage
365 {0}, // MmNumberOfPhysicalPages
366 {0}, // MmMaximumNonPagedPoolInBytes
367 {0}, // MmNonPagedSystemStart
368 {0}, // MmNonPagedPoolStart
369 {0}, // MmNonPagedPoolEnd
370 {0}, // MmPagedPoolStart
371 {0}, // MmPagedPoolEnd
372 {0}, // MmPagedPoolInfo
374 {0}, // MmSizeOfPagedPoolInBytes
375 {0}, // MmTotalCommitLimit
376 {0}, // MmTotalCommittedPages
377 {0}, // MmSharedCommit
378 {0}, // MmDriverCommit
379 {0}, // MmProcessCommit
380 {0}, // MmPagedPoolCommit
382 {0}, // MmZeroedPageListHead
383 {0}, // MmFreePageListHead
384 {0}, // MmStandbyPageListHead
385 {0}, // MmModifiedPageListHead
386 {0}, // MmModifiedNoWritePageListHead
387 {0}, // MmAvailablePages
388 {0}, // MmResidentAvailablePages
389 {0}, // PoolTrackTable
390 {0}, // NonPagedPoolDescriptor
391 {PtrToUlong(&MmHighestUserAddress
)},
392 {PtrToUlong(&MmSystemRangeStart
)},
393 {PtrToUlong(&MmUserProbeAddress
)},
394 {PtrToUlong(KdPrintDefaultCircularBuffer
)},
395 {PtrToUlong(KdPrintDefaultCircularBuffer
+ 1)},
396 {PtrToUlong(&KdPrintWritePointer
)},
397 {PtrToUlong(&KdPrintRolloverCount
)},
398 {0}, // MmLoadedUserImageList
399 {PtrToUlong(&NtBuildLab
)},
401 {PtrToUlong(KiProcessorBlock
)},
402 {0}, // MmUnloadedDrivers
403 {0}, // MmLastUnloadedDrivers
404 {0}, // MmTriageActionTaken
405 {0}, // MmSpecialPoolTag
406 {0}, // KernelVerifier
407 {0}, // MmVerifierData
408 {0}, // MmAllocatedNonPagedPool
409 {0}, // MmPeakCommitment
410 {0}, // MmtotalCommitLimitMaximum
411 {PtrToUlong(&CmNtCSDVersion
)},
412 {0}, // MmPhysicalMemoryBlock
413 {0}, // MmSessionBase
414 {0}, // MmSessionSize
417 FIELD_OFFSET(KTHREAD
, NextProcessor
),
418 FIELD_OFFSET(KTHREAD
, Teb
),
419 FIELD_OFFSET(KTHREAD
, KernelStack
),
420 FIELD_OFFSET(KTHREAD
, InitialStack
),
421 FIELD_OFFSET(KTHREAD
, ApcState
.Process
),
422 FIELD_OFFSET(KTHREAD
, State
),
426 FIELD_OFFSET(EPROCESS
, Peb
),
427 FIELD_OFFSET(EPROCESS
, InheritedFromUniqueProcessId
),
428 FIELD_OFFSET(EPROCESS
, Pcb
.DirectoryTableBase
),
430 FIELD_OFFSET(KPRCB
, DpcRoutineActive
),
431 FIELD_OFFSET(KPRCB
, CurrentThread
),
432 FIELD_OFFSET(KPRCB
, MHz
),
433 FIELD_OFFSET(KPRCB
, CpuType
),
434 FIELD_OFFSET(KPRCB
, VendorString
),
435 FIELD_OFFSET(KPRCB
, ProcessorState
.ContextFrame
),
436 FIELD_OFFSET(KPRCB
, Number
),
438 {PtrToUlong(KdPrintDefaultCircularBuffer
)},
439 {PtrToUlong(&KdPrintBufferSize
)},
440 {PtrToUlong(&KeLoaderBlock
)},
441 sizeof(KIPCR
) + sizeof(KPRCB
),
442 FIELD_OFFSET(KIPCR
, Self
),
443 FIELD_OFFSET(KPCR
, Prcb
),
444 FIELD_OFFSET(KIPCR
, PrcbData
),
450 FIELD_OFFSET(KIPCR
, PrcbData
) +
451 FIELD_OFFSET(KPRCB
, ProcessorState
.SpecialRegisters
),
462 {0}, // IopNumTriagDumpDataBlocks
463 {0}, // IopTriageDumpDataBlocks