Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

kddata.c

Go to the documentation of this file.
00001 /*++ 00002 00003 Copyright (c) 1990 Microsoft Corporation 00004 00005 Module Name: 00006 00007 kddata.c 00008 00009 Abstract: 00010 00011 This module contains global data for the portable kernel debgger. 00012 00013 Author: 00014 00015 Mark Lucovsky 1-Nov-1993 00016 00017 Revision History: 00018 00019 --*/ 00020 00021 #include "kdp.h" 00022 #include "ke.h" 00023 #include "pool.h" 00024 #include "stdio.h" 00025 00026 00027 // 00028 // Miscellaneous data from all over the kernel 00029 // 00030 00031 00032 extern ULONG KiBugCheckData[]; 00033 00034 extern PHANDLE_TABLE PspCidTable; 00035 00036 extern LIST_ENTRY ExpSystemResourcesList; 00037 extern PPOOL_DESCRIPTOR ExpPagedPoolDescriptor; 00038 extern ULONG ExpNumberOfPagedPools; 00039 00040 extern ULONG KeTimeIncrement; 00041 extern LIST_ENTRY KeBugCheckCallbackListHead; 00042 extern ULONG KiBugcheckData[]; 00043 00044 extern LIST_ENTRY IopErrorLogListHead; 00045 00046 extern POBJECT_DIRECTORY ObpRootDirectoryObject; 00047 extern POBJECT_TYPE ObpTypeObjectType; 00048 00049 extern PVOID MmSystemCacheStart; 00050 extern PVOID MmSystemCacheEnd; 00051 00052 extern PVOID MmPfnDatabase; 00053 extern ULONG MmSystemPtesStart[]; 00054 extern ULONG MmSystemPtesEnd[]; 00055 extern ULONG MmSubsectionBase; 00056 extern ULONG MmNumberOfPagingFiles; 00057 00058 extern ULONG MmLowestPhysicalPage; 00059 extern ULONG MmHighestPhysicalPage; 00060 extern PFN_COUNT MmNumberOfPhysicalPages; 00061 00062 extern ULONG MmMaximumNonPagedPoolInBytes; 00063 extern PVOID MmNonPagedSystemStart; 00064 extern PVOID MmNonPagedPoolStart; 00065 extern PVOID MmNonPagedPoolEnd; 00066 00067 extern PVOID MmPagedPoolStart; 00068 extern PVOID MmPagedPoolEnd; 00069 extern ULONG MmPagedPoolInfo[]; 00070 extern ULONG MmSizeOfPagedPoolInBytes; 00071 00072 extern ULONG MmTotalCommitLimit; 00073 extern ULONG MmTotalCommittedPages; 00074 extern ULONG MmSharedCommit; 00075 extern ULONG MmDriverCommit; 00076 extern ULONG MmProcessCommit; 00077 extern ULONG MmPagedPoolCommit; 00078 extern ULONG MmExtendedCommit; 00079 00080 extern MMPFNLIST MmZeroedPageListHead; 00081 extern MMPFNLIST MmFreePageListHead; 00082 extern MMPFNLIST MmStandbyPageListHead; 00083 extern MMPFNLIST MmModifiedPageListHead; 00084 extern MMPFNLIST MmModifiedNoWritePageListHead; 00085 extern ULONG MmAvailablePages; 00086 extern LONG MmResidentAvailablePages; 00087 extern LIST_ENTRY MmLoadedUserImageList; 00088 00089 extern PPOOL_TRACKER_TABLE PoolTrackTable; 00090 extern POOL_DESCRIPTOR NonPagedPoolDescriptor; 00091 00092 extern PVOID MiUnloadedDrivers; 00093 extern ULONG MiLastUnloadedDriver; 00094 extern ULONG MiTriageActionTaken; 00095 extern ULONG MmSpecialPoolTag; 00096 extern LOGICAL KernelVerifier; 00097 extern PVOID MmVerifierData; 00098 extern PFN_NUMBER MmAllocatedNonPagedPool; 00099 extern SIZE_T MmPeakCommitment; 00100 extern SIZE_T MmTotalCommitLimitMaximum; 00101 00102 // 00103 // This block of data needs to always be present because crashdumps 00104 // need the information. Otherwise, things like PAGE_SIZE are not available 00105 // in crashdumps, and extensions like !pool fail. 00106 // 00107 00108 KDDEBUGGER_DATA64 KdDebuggerDataBlock = { 00109 {0}, // DBGKD_DEBUG_DATA_HEADER Header; 00110 (ULONG64)0, 00111 (ULONG64)RtlpBreakWithStatusInstruction, 00112 (ULONG64)0, 00113 (USHORT)FIELD_OFFSET(KTHREAD, CallbackStack), // USHORT ThCallbackStack; 00114 (USHORT)FIELD_OFFSET(KCALLOUT_FRAME, CbStk), // USHORT NextCallback; 00115 00116 #if defined(_X86_) 00117 (USHORT)FIELD_OFFSET(KCALLOUT_FRAME, Ebp), 00118 #else 00119 (USHORT)0, // USHORT FramePointer; 00120 #endif 00121 00122 #if defined(_X86PAE_) 00123 (USHORT)1, 00124 #else 00125 (USHORT)0, // USHORT PaeEnabled; 00126 #endif 00127 00128 (ULONG64)KiCallUserMode, 00129 (ULONG64)0, 00130 00131 (ULONG64)&PsLoadedModuleList, 00132 (ULONG64)&PsActiveProcessHead, 00133 (ULONG64)&PspCidTable, 00134 00135 (ULONG64)&ExpSystemResourcesList, 00136 (ULONG64)&ExpPagedPoolDescriptor, 00137 (ULONG64)&ExpNumberOfPagedPools, 00138 00139 (ULONG64)&KeTimeIncrement, 00140 (ULONG64)&KeBugCheckCallbackListHead, 00141 (ULONG64)KiBugCheckData, 00142 00143 (ULONG64)&IopErrorLogListHead, 00144 00145 (ULONG64)&ObpRootDirectoryObject, 00146 (ULONG64)&ObpTypeObjectType, 00147 00148 (ULONG64)&MmSystemCacheStart, 00149 (ULONG64)&MmSystemCacheEnd, 00150 (ULONG64)&MmSystemCacheWs, 00151 00152 (ULONG64)&MmPfnDatabase, 00153 (ULONG64)MmSystemPtesStart, 00154 (ULONG64)MmSystemPtesEnd, 00155 (ULONG64)&MmSubsectionBase, 00156 (ULONG64)&MmNumberOfPagingFiles, 00157 00158 (ULONG64)&MmLowestPhysicalPage, 00159 (ULONG64)&MmHighestPhysicalPage, 00160 (ULONG64)&MmNumberOfPhysicalPages, 00161 00162 (ULONG64)&MmMaximumNonPagedPoolInBytes, 00163 (ULONG64)&MmNonPagedSystemStart, 00164 (ULONG64)&MmNonPagedPoolStart, 00165 (ULONG64)&MmNonPagedPoolEnd, 00166 00167 (ULONG64)&MmPagedPoolStart, 00168 (ULONG64)&MmPagedPoolEnd, 00169 (ULONG64)&MmPagedPoolInfo, 00170 (ULONG64)PAGE_SIZE, 00171 (ULONG64)&MmSizeOfPagedPoolInBytes, 00172 00173 (ULONG64)&MmTotalCommitLimit, 00174 (ULONG64)&MmTotalCommittedPages, 00175 (ULONG64)&MmSharedCommit, 00176 (ULONG64)&MmDriverCommit, 00177 (ULONG64)&MmProcessCommit, 00178 (ULONG64)&MmPagedPoolCommit, 00179 (ULONG64)&MmExtendedCommit, 00180 00181 (ULONG64)&MmZeroedPageListHead, 00182 (ULONG64)&MmFreePageListHead, 00183 (ULONG64)&MmStandbyPageListHead, 00184 (ULONG64)&MmModifiedPageListHead, 00185 (ULONG64)&MmModifiedNoWritePageListHead, 00186 (ULONG64)&MmAvailablePages, 00187 (ULONG64)&MmResidentAvailablePages, 00188 00189 (ULONG64)&PoolTrackTable, 00190 (ULONG64)&NonPagedPoolDescriptor, 00191 00192 (ULONG64)&MmHighestUserAddress, 00193 (ULONG64)&MmSystemRangeStart, 00194 (ULONG64)&MmUserProbeAddress, 00195 00196 (ULONG64)KdPrintCircularBuffer, 00197 (ULONG64)KdPrintCircularBuffer+sizeof(KdPrintCircularBuffer), 00198 00199 (ULONG64)&KdPrintWritePointer, 00200 (ULONG64)&KdPrintRolloverCount, 00201 (ULONG64)&MmLoadedUserImageList, 00202 00203 (ULONG64)0, 00204 (ULONG64)0, 00205 (ULONG64)KiProcessorBlock, 00206 (ULONG64)&MiUnloadedDrivers, 00207 (ULONG64)&MiLastUnloadedDriver, 00208 (ULONG64)&MiTriageActionTaken, 00209 (ULONG64)&MmSpecialPoolTag, 00210 (ULONG64)&KernelVerifier, 00211 (ULONG64)&MmVerifierData, 00212 (ULONG64)&MmAllocatedNonPagedPool, 00213 (ULONG64)&MmPeakCommitment, 00214 (ULONG64)&MmTotalCommitLimitMaximum, 00215 (ULONG64)&CmNtCSDVersion 00216 00217 }; 00218 00219 00220 // 00221 // All dta from here on will be paged out if the kernel debugger is 00222 // not enabled. 00223 // 00224 00225 #ifdef _X86_ 00226 #ifdef ALLOC_PRAGMA 00227 #pragma data_seg("PAGEKD") 00228 #endif 00229 #endif // _X86_ 00230 00231 00232 UCHAR KdPrintCircularBuffer[KDPRINTBUFFERSIZE] = {0}; 00233 PUCHAR KdPrintWritePointer = KdPrintCircularBuffer; 00234 ULONG KdPrintRolloverCount = 0; 00235 KSPIN_LOCK KdpPrintSpinLock = 0; 00236 00237 00238 BREAKPOINT_ENTRY KdpBreakpointTable[BREAKPOINT_TABLE_SIZE] = {0}; 00239 UCHAR KdpMessageBuffer[KDP_MESSAGE_BUFFER_SIZE] = {0}; 00240 UCHAR KdpPathBuffer[KDP_MESSAGE_BUFFER_SIZE] = {0}; 00241 DBGKD_INTERNAL_BREAKPOINT KdpInternalBPs[DBGKD_MAX_INTERNAL_BREAKPOINTS] = {0}; 00242 00243 LARGE_INTEGER KdPerformanceCounterRate = {0,0}; 00244 LARGE_INTEGER KdTimerStart = {0,0} ; 00245 LARGE_INTEGER KdTimerStop = {0,0}; 00246 LARGE_INTEGER KdTimerDifference = {0,0}; 00247 00248 ULONG_PTR KdpCurrentSymbolStart = 0; 00249 ULONG_PTR KdpCurrentSymbolEnd = 0; 00250 LONG KdpNextCallLevelChange = 0; // used only over returns to the debugger. 00251 00252 ULONG_PTR KdSpecialCalls[DBGKD_MAX_SPECIAL_CALLS]; 00253 ULONG KdNumberOfSpecialCalls = 0; 00254 ULONG_PTR InitialSP = 0; 00255 ULONG KdpNumInternalBreakpoints = 0; 00256 KTIMER InternalBreakpointTimer = {0}; 00257 KDPC InternalBreakpointCheckDpc = {0}; 00258 00259 BOOLEAN KdpPortLocked = FALSE; 00260 00261 00262 DBGKD_TRACE_DATA TraceDataBuffer[TRACE_DATA_BUFFER_MAX_SIZE] = {0}; 00263 ULONG TraceDataBufferPosition = 1; // Element # to write next 00264 // Recall elt 0 is a length 00265 00266 TRACE_DATA_SYM TraceDataSyms[256] = {0}; 00267 UCHAR NextTraceDataSym = 0; // what's the next one to be replaced 00268 UCHAR NumTraceDataSyms = 0; // how many are valid? 00269 00270 ULONG IntBPsSkipping = 0; // number of exceptions that are being skipped 00271 // now 00272 00273 BOOLEAN WatchStepOver = FALSE; 00274 PVOID WSOThread = NULL; // thread doing stepover 00275 ULONG_PTR WSOEsp = 0; // stack pointer of thread doing stepover (yes, we need it) 00276 ULONG WatchStepOverHandle = 0; 00277 ULONG_PTR WatchStepOverBreakAddr = 0; // where the WatchStepOver break is set 00278 BOOLEAN WatchStepOverSuspended = FALSE; 00279 ULONG InstructionsTraced = 0; 00280 BOOLEAN SymbolRecorded = FALSE; 00281 LONG CallLevelChange = 0; 00282 LONG_PTR oldpc = 0; 00283 BOOLEAN InstrCountInternal = FALSE; // Processing a non-COUNTONLY? 00284 00285 BOOLEAN BreakpointsSuspended = FALSE; 00286 00287 // 00288 // KdpRetryCount controls the number of retries before we give up and 00289 // assume kernel debugger is not present. 00290 // KdpNumberRetries is the number of retries left. Initially, it is set 00291 // to 5 such that booting NT without debugger won't be delayed to long. 00292 // 00293 00294 ULONG KdpRetryCount = 5; 00295 ULONG KdpNumberRetries = 5; 00296 ULONG KdpDefaultRetries = MAXIMUM_RETRIES ; // Retries are set to this after boot 00297 BOOLEAN KdpControlCPending = FALSE; 00298 BOOLEAN KdpControlCPressed = FALSE; 00299 00300 KDP_BREAKPOINT_TYPE KdpBreakpointInstruction = {0}; 00301 ULONG KdpNextPacketIdToSend = 0; 00302 ULONG KdpPacketIdExpected = 0; 00303 PVOID KdpNtosImageBase = NULL; 00304 00305 // 00306 // KdDebugParameters contains the debug port address and baud rate 00307 // used to initialize kernel debugger port. 00308 // 00309 // (They both get initialized to zero to indicate using default settings.) 00310 // If SYSTEM hive contains the parameters, i.e. port and baud rate, system 00311 // init code will fill in these variable with the values stored in the hive. 00312 // 00313 00314 DEBUG_PARAMETERS KdDebugParameters = {0, 0}; 00315 00316 KSPIN_LOCK KdpDataSpinLock = 0; 00317 LIST_ENTRY KdpDebuggerDataListHead = {NULL,NULL}; 00318 00319 // 00320 // !search support variables (page hit database) 00321 // 00322 00323 PFN_NUMBER KdpSearchPageHits [SEARCH_PAGE_HIT_DATABASE_SIZE]; 00324 ULONG KdpSearchPageHitOffsets [SEARCH_PAGE_HIT_DATABASE_SIZE]; 00325 ULONG KdpSearchPageHitIndex; 00326 00327 LOGICAL KdpSearchInProgress = FALSE; 00328 00329 PFN_NUMBER KdpSearchStartPageFrame; 00330 PFN_NUMBER KdpSearchEndPageFrame; 00331 00332 ULONG_PTR KdpSearchAddressRangeStart; 00333 ULONG_PTR KdpSearchAddressRangeEnd; 00334 00335 ULONG KdpSearchCheckPoint = KDP_SEARCH_SYMBOL_CHECK; 00336 00337 00338 #ifdef _X86_ 00339 #ifdef ALLOC_PRAGMA 00340 #pragma data_seg() 00341 #endif 00342 #endif // _X86_ 00343 00344 KSPIN_LOCK KdpTimeSlipEventLock = 0; 00345 PVOID KdpTimeSlipEvent = NULL; 00346 KDPC KdpTimeSlipDpc = {0}; 00347 WORK_QUEUE_ITEM KdpTimeSlipWorkItem = {NULL}; 00348 KTIMER KdpTimeSlipTimer = {0}; 00349 ULONG KdpTimeSlipPending = 1; 00350 00351 00352 BOOLEAN KdDebuggerNotPresent = FALSE; 00353 BOOLEAN KdDebuggerEnabled = FALSE; 00354 BOOLEAN KdPitchDebugger = TRUE; 00355 BOOLEAN KdpDebuggerStructuresInitialized = FALSE ; 00356 ULONG KdpOweBreakpoint; 00357 ULONG KdEnteredDebugger = FALSE;

Generated on Sat May 15 19:40:34 2004 for test by doxygen 1.3.7