167{
171
172
173 if (BootPhase)
174 {
175
178 }
179
180
183
184
186
187
189
190
192 {
193
195
196
200
201
204
205#ifdef CONFIG_SMP
206
208#endif
209
210
213
214
220
221
223 }
224
225
226 if (LoaderBlock)
227 {
228 PSTR CommandLine, DebugLine;
229
230
233 InLoadOrderLinks);
234
235
238
239
240 CommandLine = LoaderBlock->LoadOptions;
242 {
243
245
246
248
249
250 if (
strstr(CommandLine,
"CRASHDEBUG"))
251 {
252
254 }
255 else if (
strstr(CommandLine,
"NODEBUG"))
256 {
257
259 }
260 else if ((DebugLine =
strstr(CommandLine,
"DEBUG")))
261 {
262
264
265
266 if (DebugLine[5] == '=')
267 {
268
269 PSTR DebugOptionStart, DebugOptionEnd;
270 DebugOptionStart = DebugOptionEnd = &DebugLine[6];
271
272
273 for (;;)
274 {
276
277
279 {
280
281 if ((*DebugOptionEnd == ',') ||
282 (*DebugOptionEnd == ' ') ||
283 (*DebugOptionEnd == '\t'))
284 {
285
286
287
288
289 break;
290 }
291 else
292 {
293
294 DebugOptionEnd++;
295 }
296 }
297
298
299 DebugOptionLength = (DebugOptionEnd - DebugOptionStart);
300
301
302
303
304
305 if (!DebugOptionLength)
306 break;
307
308
309 if ((DebugOptionLength == 10) &&
310 !(
strncmp(DebugOptionStart,
"AUTOENABLE", 10)))
311 {
312
313
314 DisableKdAfterInit =
TRUE;
317 }
318 else if ((DebugOptionLength == 7) &&
319 !(
strncmp(DebugOptionStart,
"DISABLE", 7)))
320 {
321
322 DisableKdAfterInit =
TRUE;
325 }
326 else if ((DebugOptionLength == 6) &&
327 !(
strncmp(DebugOptionStart,
"NOUMEX", 6)))
328 {
329
331 }
332
333
334
335
336
337 if (*DebugOptionEnd != ',')
338 break;
339
340
341 DebugOptionEnd++;
342 DebugOptionStart = DebugOptionEnd;
343 }
344 }
345 }
346 }
347 else
348 {
349
352 }
353 }
354 else
355 {
356
358
359
361 }
362
363
365
366
368 {
369
371
372
374 {
375
377
378
381 {
385 }
386
387
391
392
394 }
395
396
398
399
402
403
405
406
408
409
410 if (DisableKdAfterInit)
411 {
412
414
415
416
417
418
421 }
422
423
424 if (LoaderBlock)
425 {
430 CHAR NameBuffer[256];
431
432
433 for (NextEntry = LoaderBlock->LoadOrderListHead.Flink,
i = 0;
434 NextEntry != &LoaderBlock->LoadOrderListHead && (
i < 2);
435 NextEntry = NextEntry->
Flink, ++
i)
436 {
437
440 InLoadOrderLinks);
441
442
446 do
447 {
448
451
452
454
455
460 }
461
462
463
465 }
466 }
467 else
468 {
469
471 }
472
473
475}
char * strstr(char *String1, char *String2)
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
#define NT_SUCCESS(StatCode)
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
#define InitializeListHead(ListHead)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
LARGE_INTEGER NTAPI KeQueryPerformanceCounter(IN PLARGE_INTEGER PerformanceFreq)
BOOLEAN NTAPI KdpTrap(IN PKTRAP_FRAME TrapFrame, IN PKEXCEPTION_FRAME ExceptionFrame, IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT ContextRecord, IN KPROCESSOR_MODE PreviousMode, IN BOOLEAN SecondChanceException)
#define KD_BREAKPOINT_MAX
BREAKPOINT_ENTRY KdpBreakpointTable[KD_BREAKPOINT_MAX]
NTSTATUS NTAPI KdDisableDebuggerWithLock(IN BOOLEAN NeedLock)
LARGE_INTEGER KdPerformanceCounterRate
BOOLEAN KdBreakAfterSymbolLoad
DBGKD_GET_VERSION64 KdVersionBlock
VOID NTAPI KdpTimeSlipWork(IN PVOID Context)
LARGE_INTEGER KdTimerStart
BOOLEAN KdIgnoreUmExceptions
PKDEBUG_ROUTINE KiDebugRoutine
BOOLEAN NTAPI KdpStub(IN PKTRAP_FRAME TrapFrame, IN PKEXCEPTION_FRAME ExceptionFrame, IN PEXCEPTION_RECORD ExceptionRecord, IN PCONTEXT ContextRecord, IN KPROCESSOR_MODE PreviousMode, IN BOOLEAN SecondChanceException)
WORK_QUEUE_ITEM KdpTimeSlipWorkItem
LIST_ENTRY KdpDebuggerDataListHead
BOOLEAN KdpDebuggerStructuresInitialized
VOID NTAPI KdpTimeSlipDpcRoutine(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
BOOLEAN KdAutoEnableOnEvent
NTSTATUS NTAPI KdDebuggerInitialize0(IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL)
BOOLEAN KdDebuggerNotPresent
BOOLEAN KdDebuggerEnabled
KDDEBUGGER_DATA64 * KdDebuggerDataBlock
BOOLEAN NTAPI KdRegisterDebuggerDataBlock(IN ULONG Tag, IN PDBGKD_DEBUG_DATA_HEADER64 DataHeader, IN ULONG Size)
static VOID KdpPrintBanner(VOID)
Displays the kernel debugger initialization banner.
BOOLEAN NTAPI KdPollBreakIn(VOID)
static const char * ImageName
VOID NTAPI DbgLoadImageSymbols(_In_ PSTRING Name, _In_ PVOID Base, _In_ ULONG_PTR ProcessId)
NTSYSAPI VOID NTAPI RtlInitString(PSTRING DestinationString, PCSZ SourceString)
_In_ ULONG _In_ ULONG _In_ ULONG Length
HANDLE NTAPI PsGetCurrentProcessId(VOID)
LIST_ENTRY PsLoadedModuleList
ULONG_PTR PsNtosImageBase
#define DBGKD_VERS_FLAG_MP
ULONG_PTR DirectoryTableBase
ULONG64 PsLoadedModuleList
DBGKD_DEBUG_DATA_HEADER64 Header
UNICODE_STRING FullDllName
struct _LIST_ENTRY * Flink
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
#define CONTAINING_RECORD(address, type, field)
#define DbgKdMaximumStateChange
#define DbgKdMinimumStateChange
#define DbgKdMaximumManipulate
#define DbgKdMinimumManipulate
#define ExInitializeWorkItem(Item, Routine, Context)