Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygenkd64.h
Go to the documentation of this file.
00001 /* 00002 * PROJECT: ReactOS Kernel 00003 * LICENSE: GPL - See COPYING in the top level directory 00004 * FILE: ntoskrnl/include/kd64.h 00005 * PURPOSE: Internal header for the KD64 Library 00006 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) 00007 */ 00008 00009 // 00010 // Maximum supported number of breakpoints 00011 // 00012 #define KD_BREAKPOINT_MAX 32 00013 00014 // 00015 // Default size of the DbgPrint log buffer 00016 // 00017 #if DBG 00018 #define KD_DEFAULT_LOG_BUFFER_SIZE 0x8000 00019 #else 00020 #define KD_DEFAULT_LOG_BUFFER_SIZE 0x1000 00021 #endif 00022 00023 // 00024 // Breakpoint Status Flags 00025 // 00026 typedef enum _KDP_BREAKPOINT_FLAGS 00027 { 00028 KdpBreakpointActive = 1, 00029 KdpBreakpointPending = 2, 00030 KdpBreakpointSuspended = 4, 00031 KdpBreakpointExpired = 8 00032 } KDP_BREAKPOINT_FLAGS; 00033 00034 // 00035 // Structure for Breakpoints 00036 // 00037 typedef struct _BREAKPOINT_ENTRY 00038 { 00039 ULONG Flags; 00040 PKPROCESS Process; 00041 PVOID Address; 00042 KD_BREAKPOINT_TYPE Content; 00043 } BREAKPOINT_ENTRY, *PBREAKPOINT_ENTRY; 00044 00045 // 00046 // Debug and Multi-Processor Switch Routine Definitions 00047 // 00048 typedef 00049 BOOLEAN 00050 (NTAPI *PKDEBUG_ROUTINE)( 00051 IN PKTRAP_FRAME TrapFrame, 00052 IN PKEXCEPTION_FRAME ExceptionFrame, 00053 IN PEXCEPTION_RECORD ExceptionRecord, 00054 IN PCONTEXT Context, 00055 IN KPROCESSOR_MODE PreviousMode, 00056 IN BOOLEAN SecondChance 00057 ); 00058 00059 typedef 00060 BOOLEAN 00061 (NTAPI *PKDEBUG_SWITCH_ROUTINE)( 00062 IN PEXCEPTION_RECORD ExceptionRecord, 00063 IN PCONTEXT Context, 00064 IN BOOLEAN SecondChance 00065 ); 00066 00067 // 00068 // Initialization Routines 00069 // 00070 BOOLEAN 00071 NTAPI 00072 KdInitSystem( 00073 ULONG Reserved, 00074 PLOADER_PARAMETER_BLOCK LoaderBlock 00075 ); 00076 00077 VOID 00078 NTAPI 00079 KdUpdateDataBlock( 00080 VOID 00081 ); 00082 00083 // 00084 // Determines if the kernel debugger must handle a particular trap 00085 // 00086 BOOLEAN 00087 NTAPI 00088 KdIsThisAKdTrap( 00089 IN PEXCEPTION_RECORD ExceptionRecord, 00090 IN PCONTEXT Context, 00091 IN KPROCESSOR_MODE PreviousMode 00092 ); 00093 00094 // 00095 // Multi-Processor Switch Support 00096 // 00097 BOOLEAN 00098 NTAPI 00099 KdpSwitchProcessor( 00100 IN PEXCEPTION_RECORD ExceptionRecord, 00101 IN OUT PCONTEXT ContextRecord, 00102 IN BOOLEAN SecondChanceException 00103 ); 00104 00105 // 00106 // Time Slip Support 00107 // 00108 VOID 00109 NTAPI 00110 KdpTimeSlipWork( 00111 IN PVOID Context 00112 ); 00113 00114 VOID 00115 NTAPI 00116 KdpTimeSlipDpcRoutine( 00117 IN PKDPC Dpc, 00118 IN PVOID DeferredContext, 00119 IN PVOID SystemArgument1, 00120 IN PVOID SystemArgument2 00121 ); 00122 00123 // 00124 // Debug Trap Handlers 00125 // 00126 BOOLEAN 00127 NTAPI 00128 KdpStub( 00129 IN PKTRAP_FRAME TrapFrame, 00130 IN PKEXCEPTION_FRAME ExceptionFrame, 00131 IN PEXCEPTION_RECORD ExceptionRecord, 00132 IN PCONTEXT ContextRecord, 00133 IN KPROCESSOR_MODE PreviousMode, 00134 IN BOOLEAN SecondChanceException 00135 ); 00136 00137 BOOLEAN 00138 NTAPI 00139 KdpTrap( 00140 IN PKTRAP_FRAME TrapFrame, 00141 IN PKEXCEPTION_FRAME ExceptionFrame, 00142 IN PEXCEPTION_RECORD ExceptionRecord, 00143 IN PCONTEXT ContextRecord, 00144 IN KPROCESSOR_MODE PreviousMode, 00145 IN BOOLEAN SecondChanceException 00146 ); 00147 00148 // 00149 // Port Locking 00150 // 00151 VOID 00152 NTAPI 00153 KdpPortLock( 00154 VOID 00155 ); 00156 00157 VOID 00158 NTAPI 00159 KdpPortUnlock( 00160 VOID 00161 ); 00162 00163 BOOLEAN 00164 NTAPI 00165 KdpPollBreakInWithPortLock( 00166 VOID 00167 ); 00168 00169 // 00170 // Debugger Enter, Exit, Enable and Disable 00171 // 00172 BOOLEAN 00173 NTAPI 00174 KdEnterDebugger( 00175 IN PKTRAP_FRAME TrapFrame, 00176 IN PKEXCEPTION_FRAME ExceptionFrame 00177 ); 00178 00179 VOID 00180 NTAPI 00181 KdExitDebugger( 00182 IN BOOLEAN Enable 00183 ); 00184 00185 NTSTATUS 00186 NTAPI 00187 KdEnableDebuggerWithLock( 00188 IN BOOLEAN NeedLock 00189 ); 00190 00191 NTSTATUS 00192 NTAPI 00193 KdDisableDebuggerWithLock( 00194 IN BOOLEAN NeedLock 00195 ); 00196 00197 // 00198 // Debug Event Handlers 00199 // 00200 NTSTATUS 00201 NTAPI 00202 KdpPrint( 00203 IN ULONG ComponentId, 00204 IN ULONG Level, 00205 IN LPSTR String, 00206 IN USHORT Length, 00207 IN KPROCESSOR_MODE PreviousMode, 00208 IN PKTRAP_FRAME TrapFrame, 00209 IN PKEXCEPTION_FRAME ExceptionFrame, 00210 OUT PBOOLEAN Handled 00211 ); 00212 00213 USHORT 00214 NTAPI 00215 KdpPrompt( 00216 IN LPSTR PromptString, 00217 IN USHORT PromptLength, 00218 OUT LPSTR ResponseString, 00219 IN USHORT MaximumResponseLength, 00220 IN KPROCESSOR_MODE PreviousMode, 00221 IN PKTRAP_FRAME TrapFrame, 00222 IN PKEXCEPTION_FRAME ExceptionFrame 00223 ); 00224 00225 VOID 00226 NTAPI 00227 KdpSymbol( 00228 IN PSTRING DllPath, 00229 IN PKD_SYMBOLS_INFO SymbolInfo, 00230 IN BOOLEAN Unload, 00231 IN KPROCESSOR_MODE PreviousMode, 00232 IN PCONTEXT ContextRecord, 00233 IN PKTRAP_FRAME TrapFrame, 00234 IN PKEXCEPTION_FRAME ExceptionFrame 00235 ); 00236 00237 VOID 00238 NTAPI 00239 KdpCommandString( 00240 IN PSTRING NameString, 00241 IN PSTRING CommandString, 00242 IN KPROCESSOR_MODE PreviousMode, 00243 IN PCONTEXT ContextRecord, 00244 IN PKTRAP_FRAME TrapFrame, 00245 IN PKEXCEPTION_FRAME ExceptionFrame 00246 ); 00247 00248 // 00249 // State Change Notifications 00250 // 00251 VOID 00252 NTAPI 00253 KdpReportLoadSymbolsStateChange( 00254 IN PSTRING PathName, 00255 IN PKD_SYMBOLS_INFO SymbolInfo, 00256 IN BOOLEAN Unload, 00257 IN OUT PCONTEXT Context 00258 ); 00259 00260 VOID 00261 NTAPI 00262 KdpReportCommandStringStateChange( 00263 IN PSTRING NameString, 00264 IN PSTRING CommandString, 00265 IN OUT PCONTEXT Context 00266 ); 00267 00268 BOOLEAN 00269 NTAPI 00270 KdpReportExceptionStateChange( 00271 IN PEXCEPTION_RECORD ExceptionRecord, 00272 IN OUT PCONTEXT Context, 00273 IN BOOLEAN SecondChanceException 00274 ); 00275 00276 // 00277 // Breakpoint Support 00278 // 00279 ULONG 00280 NTAPI 00281 KdpAddBreakpoint( 00282 IN PVOID Address 00283 ); 00284 00285 BOOLEAN 00286 NTAPI 00287 KdpDeleteBreakpoint( 00288 IN ULONG BpEntry 00289 ); 00290 00291 BOOLEAN 00292 NTAPI 00293 KdpDeleteBreakpointRange( 00294 IN PVOID Base, 00295 IN PVOID Limit 00296 ); 00297 00298 VOID 00299 NTAPI 00300 KdpSuspendBreakPoint( 00301 IN ULONG BpEntry 00302 ); 00303 00304 VOID 00305 NTAPI 00306 KdpRestoreAllBreakpoints( 00307 VOID 00308 ); 00309 00310 VOID 00311 NTAPI 00312 KdpSuspendAllBreakPoints( 00313 VOID 00314 ); 00315 00316 // 00317 // Routine to determine if it is safe to disable the debugger 00318 // 00319 NTSTATUS 00320 NTAPI 00321 KdpAllowDisable( 00322 VOID 00323 ); 00324 00325 // 00326 // Safe memory read & write Support 00327 // 00328 NTSTATUS 00329 NTAPI 00330 KdpCopyMemoryChunks( 00331 IN ULONG64 Address, 00332 IN PVOID Buffer, 00333 IN ULONG TotalSize, 00334 IN ULONG ChunkSize, 00335 IN ULONG Flags, 00336 OUT PULONG ActualSize OPTIONAL 00337 ); 00338 00339 // 00340 // Low Level Support Routines for the KD API 00341 // 00342 00343 // 00344 // Version 00345 // 00346 VOID 00347 NTAPI 00348 KdpSysGetVersion( 00349 IN PDBGKD_GET_VERSION64 Version 00350 ); 00351 00352 // 00353 // Context 00354 // 00355 VOID 00356 NTAPI 00357 KdpGetStateChange( 00358 IN PDBGKD_MANIPULATE_STATE64 State, 00359 IN PCONTEXT Context 00360 ); 00361 00362 VOID 00363 NTAPI 00364 KdpSetContextState( 00365 IN PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange, 00366 IN PCONTEXT Context 00367 ); 00368 00369 // 00370 // MSR 00371 // 00372 NTSTATUS 00373 NTAPI 00374 KdpSysReadMsr( 00375 IN ULONG Msr, 00376 OUT PLARGE_INTEGER MsrValue 00377 ); 00378 00379 NTSTATUS 00380 NTAPI 00381 KdpSysWriteMsr( 00382 IN ULONG Msr, 00383 IN PLARGE_INTEGER MsrValue 00384 ); 00385 00386 // 00387 // Bus 00388 // 00389 NTSTATUS 00390 NTAPI 00391 KdpSysReadBusData( 00392 IN ULONG BusDataType, 00393 IN ULONG BusNumber, 00394 IN ULONG SlotNumber, 00395 IN ULONG Offset, 00396 IN PVOID Buffer, 00397 IN ULONG Length, 00398 OUT PULONG ActualLength 00399 ); 00400 00401 NTSTATUS 00402 NTAPI 00403 KdpSysWriteBusData( 00404 IN ULONG BusDataType, 00405 IN ULONG BusNumber, 00406 IN ULONG SlotNumber, 00407 IN ULONG Offset, 00408 IN PVOID Buffer, 00409 IN ULONG Length, 00410 OUT PULONG ActualLength 00411 ); 00412 00413 // 00414 // Control Space 00415 // 00416 NTSTATUS 00417 NTAPI 00418 KdpSysReadControlSpace( 00419 IN ULONG Processor, 00420 IN ULONG64 BaseAddress, 00421 IN PVOID Buffer, 00422 IN ULONG Length, 00423 OUT PULONG ActualLength 00424 ); 00425 00426 NTSTATUS 00427 NTAPI 00428 KdpSysWriteControlSpace( 00429 IN ULONG Processor, 00430 IN ULONG64 BaseAddress, 00431 IN PVOID Buffer, 00432 IN ULONG Length, 00433 OUT PULONG ActualLength 00434 ); 00435 00436 // 00437 // I/O Space 00438 // 00439 NTSTATUS 00440 NTAPI 00441 KdpSysReadIoSpace( 00442 IN ULONG InterfaceType, 00443 IN ULONG BusNumber, 00444 IN ULONG AddressSpace, 00445 IN ULONG64 IoAddress, 00446 IN PVOID DataValue, 00447 IN ULONG DataSize, 00448 OUT PULONG ActualDataSize 00449 ); 00450 00451 NTSTATUS 00452 NTAPI 00453 KdpSysWriteIoSpace( 00454 IN ULONG InterfaceType, 00455 IN ULONG BusNumber, 00456 IN ULONG AddressSpace, 00457 IN ULONG64 IoAddress, 00458 IN PVOID DataValue, 00459 IN ULONG DataSize, 00460 OUT PULONG ActualDataSize 00461 ); 00462 00463 // 00464 // Low Memory 00465 // 00466 NTSTATUS 00467 NTAPI 00468 KdpSysCheckLowMemory( 00469 IN ULONG Flags 00470 ); 00471 00472 // 00473 // Internal routine for sending strings directly to the debugger 00474 // 00475 VOID 00476 __cdecl 00477 KdpDprintf( 00478 IN PCHAR Format, 00479 ... 00480 ); 00481 00482 // 00483 // Global KD Data 00484 // 00485 extern DBGKD_GET_VERSION64 KdVersionBlock; 00486 extern KDDEBUGGER_DATA64 KdDebuggerDataBlock; 00487 extern LIST_ENTRY KdpDebuggerDataListHead; 00488 extern KSPIN_LOCK KdpDataSpinLock; 00489 extern LARGE_INTEGER KdPerformanceCounterRate; 00490 extern LARGE_INTEGER KdTimerStart; 00491 extern ULONG KdDisableCount; 00492 extern KD_CONTEXT KdpContext; 00493 extern PKDEBUG_ROUTINE KiDebugRoutine; 00494 extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine; 00495 extern BOOLEAN KdBreakAfterSymbolLoad; 00496 extern BOOLEAN KdPitchDebugger; 00497 extern BOOLEAN _KdDebuggerNotPresent; 00498 extern BOOLEAN _KdDebuggerEnabled; 00499 extern BOOLEAN KdAutoEnableOnEvent; 00500 extern BOOLEAN KdBlockEnable; 00501 extern BOOLEAN KdIgnoreUmExceptions; 00502 extern BOOLEAN KdPreviouslyEnabled; 00503 extern BOOLEAN KdpDebuggerStructuresInitialized; 00504 extern BOOLEAN KdEnteredDebugger; 00505 extern KDPC KdpTimeSlipDpc; 00506 extern KTIMER KdpTimeSlipTimer; 00507 extern WORK_QUEUE_ITEM KdpTimeSlipWorkItem; 00508 extern LONG KdpTimeSlipPending; 00509 extern PKEVENT KdpTimeSlipEvent; 00510 extern KSPIN_LOCK KdpTimeSlipEventLock; 00511 extern BOOLEAN KdpPortLocked; 00512 extern BOOLEAN KdpControlCPressed; 00513 extern BOOLEAN KdpContextSent; 00514 extern KSPIN_LOCK KdpDebuggerLock; 00515 extern LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference; 00516 extern ULONG KdComponentTableSize; 00517 extern ULONG Kd_WIN2000_Mask; 00518 extern PULONG KdComponentTable[104]; 00519 extern CHAR KdpMessageBuffer[0x1000], KdpPathBuffer[0x1000]; 00520 extern CHAR KdPrintDefaultCircularBuffer[KD_DEFAULT_LOG_BUFFER_SIZE]; 00521 extern BREAKPOINT_ENTRY KdpBreakpointTable[KD_BREAKPOINT_MAX]; 00522 extern KD_BREAKPOINT_TYPE KdpBreakpointInstruction; 00523 extern BOOLEAN KdpOweBreakpoint; 00524 extern BOOLEAN BreakpointsSuspended; 00525 extern ULONG KdpNumInternalBreakpoints; 00526 extern ULONG_PTR KdpCurrentSymbolStart, KdpCurrentSymbolEnd; 00527 extern ULONG TraceDataBuffer[40]; 00528 extern ULONG TraceDataBufferPosition; Generated on Sun May 27 2012 04:37:14 for ReactOS by
1.7.6.1
|