ReactOS 0.4.15-dev-7788-g1ad9096
kdinit.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/kd64/kdinit.c
5 * PURPOSE: KD64 Initialization Code
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7 * Stefan Ginsberg (stefan.ginsberg@reactos.org)
8 */
9
10/* INCLUDES ******************************************************************/
11
12#include <ntoskrnl.h>
13#include <reactos/buildno.h>
14#define NDEBUG
15#include <debug.h>
16
17/* UTILITY FUNCTIONS *********************************************************/
18
19/*
20 * Get the total size of the memory before
21 * Mm is initialized, by counting the number
22 * of physical pages. Useful for debug logging.
23 *
24 * Strongly inspired by:
25 * mm\ARM3\mminit.c : MiScanMemoryDescriptors(...)
26 *
27 * See also: kd\kdio.c
28 */
29static CODE_SEG("INIT")
31KdpGetMemorySizeInMBs(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
32{
33 PLIST_ENTRY ListEntry;
35 SIZE_T NumberOfPhysicalPages = 0;
36
37 /* Loop the memory descriptors */
38 for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink;
39 ListEntry != &LoaderBlock->MemoryDescriptorListHead;
40 ListEntry = ListEntry->Flink)
41 {
42 /* Get the descriptor */
43 Descriptor = CONTAINING_RECORD(ListEntry,
45 ListEntry);
46
47 /* Check if this is invisible memory */
48 if ((Descriptor->MemoryType == LoaderFirmwarePermanent) ||
49 (Descriptor->MemoryType == LoaderSpecialMemory) ||
50 (Descriptor->MemoryType == LoaderHALCachedMemory) ||
51 (Descriptor->MemoryType == LoaderBBTMemory))
52 {
53 /* Skip this descriptor */
54 continue;
55 }
56
57 /* Check if this is bad memory */
58 if (Descriptor->MemoryType != LoaderBad)
59 {
60 /* Count this in the total of pages */
61 NumberOfPhysicalPages += Descriptor->PageCount;
62 }
63 }
64
65 /* Round size up. Assumed to better match actual physical RAM size */
66 return ALIGN_UP_BY(NumberOfPhysicalPages * PAGE_SIZE, 1024 * 1024) / (1024 * 1024);
67}
68
69/* See also: kd\kdio.c */
70static CODE_SEG("INIT")
71VOID
72KdpPrintBanner(IN SIZE_T MemSizeMBs)
73{
74 DPRINT1("-----------------------------------------------------\n");
75 DPRINT1("ReactOS " KERNEL_VERSION_STR " (Build " KERNEL_VERSION_BUILD_STR ") (Commit " KERNEL_VERSION_COMMIT_HASH ")\n");
76 DPRINT1("%u System Processor [%u MB Memory]\n", KeNumberProcessors, MemSizeMBs);
77
78 if (KeLoaderBlock)
79 {
80 DPRINT1("Command Line: %s\n", KeLoaderBlock->LoadOptions);
82 }
83}
84
85/* FUNCTIONS *****************************************************************/
86
87VOID
90{
91 /* Update the KeUserCallbackDispatcher pointer */
94}
95
100 IN ULONG Size)
101{
103 PLIST_ENTRY NextEntry;
104 PDBGKD_DEBUG_DATA_HEADER64 CurrentHeader;
105
106 /* Acquire the Data Lock */
108
109 /* Loop the debugger data list */
110 NextEntry = KdpDebuggerDataListHead.Flink;
111 while (NextEntry != &KdpDebuggerDataListHead)
112 {
113 /* Get the header for this entry */
114 CurrentHeader = CONTAINING_RECORD(NextEntry,
116 List);
117
118 /* Move to the next one */
119 NextEntry = NextEntry->Flink;
120
121 /* Check if we already have this data block */
122 if ((CurrentHeader == DataHeader) || (CurrentHeader->OwnerTag == Tag))
123 {
124 /* Release the lock and fail */
126 return FALSE;
127 }
128 }
129
130 /* Setup the header */
131 DataHeader->OwnerTag = Tag;
132 DataHeader->Size = Size;
133
134 /* Insert it into the list and release the lock */
137 return TRUE;
138}
139
141NTAPI
143 _In_ ULONG BootPhase,
145{
146 BOOLEAN EnableKd, DisableKdAfterInit = FALSE, BlockEnable;
147 PSTR CommandLine, DebugLine, DebugOptionStart, DebugOptionEnd;
149 PLDR_DATA_TABLE_ENTRY LdrEntry;
150 PLIST_ENTRY NextEntry;
151 ULONG i, j, Length;
152 SIZE_T DebugOptionLength;
153 SIZE_T MemSizeMBs;
154 CHAR NameBuffer[256];
155 PWCHAR Name;
156
157#if defined(__GNUC__)
158 /* Make gcc happy */
159 BlockEnable = FALSE;
160#endif
161
162 /* Check if this is Phase 1 */
163 if (BootPhase)
164 {
165 /* Just query the performance counter */
167 return TRUE;
168 }
169
170 /* Check if we already initialized once */
171 if (KdDebuggerEnabled) return TRUE;
172
173 /* Set the Debug Routine as the Stub for now */
175
176 /* Disable break after symbol load for now */
178
179 /* Check if the Debugger Data Block was already initialized */
181 {
182 /* It wasn't...Initialize the KD Data Listhead */
184
185 /* Register the Debugger Data Block */
188 sizeof(KdDebuggerDataBlock));
189
190 /* Fill out the KD Version Block */
193
194#ifdef CONFIG_SMP
195 /* This is an MP Build */
197#endif
198
199 /* Save Pointers to Loaded Module List and Debugger Data */
202
203 /* Set protocol limits */
208 KdVersionBlock.Unused[0] = 0;
209
210 /* Link us in the KPCR */
211 KeGetPcr()->KdVersionBlock = &KdVersionBlock;
212 }
213
214 /* Check if we have a loader block */
215 if (LoaderBlock)
216 {
217 /* Get the image entry */
218 LdrEntry = CONTAINING_RECORD(LoaderBlock->LoadOrderListHead.Flink,
220 InLoadOrderLinks);
221
222 /* Save the Kernel Base */
223 PsNtosImageBase = (ULONG_PTR)LdrEntry->DllBase;
225
226 /* Check if we have a command line */
227 CommandLine = LoaderBlock->LoadOptions;
228 if (CommandLine)
229 {
230 /* Upcase it */
231 _strupr(CommandLine);
232
233 /* Assume we'll disable KD */
234 EnableKd = FALSE;
235
236 /* Check for CRASHDEBUG, NODEBUG and just DEBUG */
237 if (strstr(CommandLine, "CRASHDEBUG"))
238 {
239 /* Don't enable KD now, but allow it to be enabled later */
241 }
242 else if (strstr(CommandLine, "NODEBUG"))
243 {
244 /* Don't enable KD and don't let it be enabled later */
246 }
247 else if ((DebugLine = strstr(CommandLine, "DEBUG")) != NULL)
248 {
249 /* Enable KD */
250 EnableKd = TRUE;
251
252 /* Check if there are any options */
253 if (DebugLine[5] == '=')
254 {
255 /* Save pointers */
256 DebugOptionStart = DebugOptionEnd = &DebugLine[6];
257
258 /* Scan the string for debug options */
259 for (;;)
260 {
261 /* Loop until we reach the end of the string */
262 while (*DebugOptionEnd != ANSI_NULL)
263 {
264 /* Check if this is a comma, a space or a tab */
265 if ((*DebugOptionEnd == ',') ||
266 (*DebugOptionEnd == ' ') ||
267 (*DebugOptionEnd == '\t'))
268 {
269 /*
270 * We reached the end of the option or
271 * the end of the string, break out
272 */
273 break;
274 }
275 else
276 {
277 /* Move on to the next character */
278 DebugOptionEnd++;
279 }
280 }
281
282 /* Calculate the length of the current option */
283 DebugOptionLength = (DebugOptionEnd - DebugOptionStart);
284
285 /*
286 * Break out if we reached the last option
287 * or if there were no options at all
288 */
289 if (!DebugOptionLength) break;
290
291 /* Now check which option this is */
292 if ((DebugOptionLength == 10) &&
293 !(strncmp(DebugOptionStart, "AUTOENABLE", 10)))
294 {
295 /*
296 * Disable the debugger, but
297 * allow it to be reenabled
298 */
299 DisableKdAfterInit = TRUE;
300 BlockEnable = FALSE;
302 }
303 else if ((DebugOptionLength == 7) &&
304 !(strncmp(DebugOptionStart, "DISABLE", 7)))
305 {
306 /* Disable the debugger */
307 DisableKdAfterInit = TRUE;
308 BlockEnable = TRUE;
310 }
311 else if ((DebugOptionLength == 6) &&
312 !(strncmp(DebugOptionStart, "NOUMEX", 6)))
313 {
314 /* Ignore user mode exceptions */
316 }
317
318 /*
319 * If there are more options then
320 * the next character should be a comma
321 */
322 if (*DebugOptionEnd != ',')
323 {
324 /* It isn't, break out */
325 break;
326 }
327
328 /* Move on to the next option */
329 DebugOptionEnd++;
330 DebugOptionStart = DebugOptionEnd;
331 }
332 }
333 }
334 }
335 else
336 {
337 /* No command line options? Disable debugger by default */
339 EnableKd = FALSE;
340 }
341 }
342 else
343 {
344 /* Called from a bugcheck or a re-enable. Save the Kernel Base. */
346
347 /* Unconditionally enable KD */
348 EnableKd = TRUE;
349 }
350
351 /* Set the Kernel Base in the Data Block */
353
354 /* Initialize the debugger if requested */
355 if (EnableKd && (NT_SUCCESS(KdDebuggerInitialize0(LoaderBlock))))
356 {
357 /* Now set our real KD routine */
359
360 /* Check if we've already initialized our structures */
362 {
363 /* Set the Debug Switch Routine and Retries */
366
367 /* Initialize breakpoints owed flag and table */
369 for (i = 0; i < KD_BREAKPOINT_MAX; i++)
370 {
374 }
375
376 /* Initialize the Time Slip DPC */
380
381 /* First-time initialization done! */
383 }
384
385 /* Initialize the timer */
387
388 /* Officially enable KD */
391
392 /* Let user-mode know that it's enabled as well */
393 SharedUserData->KdDebuggerEnabled = TRUE;
394
395 /* Display separator + ReactOS version at start of the debug log */
396 MemSizeMBs = KdpGetMemorySizeInMBs(KeLoaderBlock);
397 KdpPrintBanner(MemSizeMBs);
398
399 /* Check if the debugger should be disabled initially */
400 if (DisableKdAfterInit)
401 {
402 /* Disable it */
404
405 /*
406 * Save the enable block state and return initialized
407 * (the debugger is active but disabled).
408 */
409 KdBlockEnable = BlockEnable;
410 return TRUE;
411 }
412
413 /* Check if we have a loader block */
414 if (LoaderBlock)
415 {
416 /* Loop boot images */
417 NextEntry = LoaderBlock->LoadOrderListHead.Flink;
418 i = 0;
419 while ((NextEntry != &LoaderBlock->LoadOrderListHead) && (i < 2))
420 {
421 /* Get the image entry */
422 LdrEntry = CONTAINING_RECORD(NextEntry,
424 InLoadOrderLinks);
425
426 /* Generate the image name */
427 Name = LdrEntry->FullDllName.Buffer;
428 Length = LdrEntry->FullDllName.Length / sizeof(WCHAR);
429 j = 0;
430 do
431 {
432 /* Do cheap Unicode to ANSI conversion */
433 NameBuffer[j++] = (CHAR)*Name++;
434 } while (j < Length);
435
436 /* Null-terminate */
437 NameBuffer[j] = ANSI_NULL;
438
439 /* Load symbols for image */
440 RtlInitString(&ImageName, NameBuffer);
442 LdrEntry->DllBase,
444
445 /* Go to the next entry */
446 NextEntry = NextEntry->Flink;
447 i++;
448 }
449 }
450
451 /* Check for incoming breakin and break on symbol load if we have it */
453 }
454 else
455 {
456 /* Disable debugger */
458 }
459
460 /* Return initialized */
461 return TRUE;
462}
#define ALIGN_UP_BY(size, align)
unsigned char BOOLEAN
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
int strncmp(const char *String1, const char *String2, ACPI_SIZE Count)
Definition: utclib.c:534
struct NameRec_ * Name
Definition: cdprocs.h:460
#define DPRINT1
Definition: precomp.h:8
#define CHAR(Char)
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
Definition: dpc.c:712
#define ULONG_PTR
Definition: config.h:101
#define InsertTailList(ListHead, Entry)
UCHAR KIRQL
Definition: env_spec_w32.h:591
#define KeReleaseSpinLock(sl, irql)
Definition: env_spec_w32.h:627
#define PAGE_SIZE
Definition: env_spec_w32.h:49
#define KeAcquireSpinLock(sl, irql)
Definition: env_spec_w32.h:609
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
std::wstring STRING
Definition: fontsub.cpp:33
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
Definition: glfuncs.h:248
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
Definition: glfuncs.h:250
LARGE_INTEGER NTAPI KeQueryPerformanceCounter(IN PLARGE_INTEGER PerformanceFreq)
Definition: timer.c:138
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)
Definition: kdtrap.c:135
#define KD_BREAKPOINT_MAX
Definition: kd64.h:28
BREAKPOINT_ENTRY KdpBreakpointTable[KD_BREAKPOINT_MAX]
Definition: kddata.c:96
BOOLEAN KdPitchDebugger
Definition: kddata.c:81
NTSTATUS NTAPI KdDisableDebuggerWithLock(IN BOOLEAN NeedLock)
Definition: kdapi.c:2040
BOOLEAN KdBlockEnable
Definition: kddata.c:85
LARGE_INTEGER KdPerformanceCounterRate
Definition: kddata.c:91
BOOLEAN KdBreakAfterSymbolLoad
Definition: kddata.c:80
KDPC KdpTimeSlipDpc
Definition: kddata.c:116
BOOLEAN NTAPI KdpSwitchProcessor(IN PEXCEPTION_RECORD ExceptionRecord, IN OUT PCONTEXT ContextRecord, IN BOOLEAN SecondChanceException)
Definition: kdapi.c:1838
DBGKD_GET_VERSION64 KdVersionBlock
Definition: kddata.c:496
VOID NTAPI KdpTimeSlipWork(IN PVOID Context)
Definition: kdapi.c:1816
LARGE_INTEGER KdTimerStart
Definition: kd64.h:562
BOOLEAN KdIgnoreUmExceptions
Definition: kddata.c:86
PKDEBUG_ROUTINE KiDebugRoutine
Definition: kddata.c:74
PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine
Definition: kddata.c:75
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)
Definition: kdtrap.c:266
WORK_QUEUE_ITEM KdpTimeSlipWorkItem
Definition: kddata.c:118
KD_CONTEXT KdpContext
Definition: kddata.c:65
KSPIN_LOCK KdpDataSpinLock
Definition: kddata.c:491
LIST_ENTRY KdpDebuggerDataListHead
Definition: kddata.c:490
BOOLEAN KdpDebuggerStructuresInitialized
Definition: kddata.c:88
VOID NTAPI KdpTimeSlipDpcRoutine(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
Definition: kdapi.c:1790
BOOLEAN KdpOweBreakpoint
Definition: kddata.c:98
KTIMER KdpTimeSlipTimer
Definition: kddata.c:117
BOOLEAN KdAutoEnableOnEvent
Definition: kddata.c:84
NTSTATUS NTAPI KdDebuggerInitialize0(IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL)
Definition: kdcom.c:158
BOOLEAN KdDebuggerNotPresent
Definition: kddata.c:82
BOOLEAN KdDebuggerEnabled
Definition: kddata.c:83
KDDEBUGGER_DATA64 * KdDebuggerDataBlock
Definition: kdpacket.c:21
BOOLEAN NTAPI KdInitSystem(_In_ ULONG BootPhase, _In_opt_ PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: kdinit.c:142
BOOLEAN NTAPI KdRegisterDebuggerDataBlock(IN ULONG Tag, IN PDBGKD_DEBUG_DATA_HEADER64 DataHeader, IN ULONG Size)
Definition: kdinit.c:98
VOID NTAPI KdUpdateDataBlock(VOID)
Definition: kdinit.c:89
static CODE_SEG("INIT")
Definition: kdinit.c:29
BOOLEAN NTAPI KdPollBreakIn(VOID)
Definition: kdlock.c:75
CCHAR KeNumberProcessors
Definition: krnlinit.c:35
PLOADER_PARAMETER_BLOCK KeLoaderBlock
Definition: krnlinit.c:29
if(dx< 0)
Definition: linetemp.h:194
unsigned __int64 ULONG64
Definition: imports.h:198
static const char * ImageName
Definition: image.c:34
#define _In_
Definition: ms_sal.h:308
#define _In_opt_
Definition: ms_sal.h:309
__int3264 LONG_PTR
Definition: mstsclib_h.h:276
#define KeGetPcr()
Definition: ketypes.h:81
VOID NTAPI DbgLoadImageSymbols(_In_ PSTRING Name, _In_ PVOID Base, _In_ ULONG_PTR ProcessId)
NTSYSAPI VOID NTAPI RtlInitString(PSTRING DestinationString, PCSZ SourceString)
#define ANSI_NULL
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
PVOID KeUserCallbackDispatcher
Definition: ke.h:142
HANDLE NTAPI PsGetCurrentProcessId(VOID)
Definition: process.c:1123
unsigned short USHORT
Definition: pedump.c:61
LIST_ENTRY PsLoadedModuleList
Definition: sysldr.c:21
ULONG_PTR PsNtosImageBase
Definition: sysldr.c:25
_CRTIMP char *__cdecl _strupr(_Inout_z_ char *_String)
#define DBGKD_VERS_FLAG_MP
Definition: wdbgexts.h:27
#define KDBG_TAG
Definition: wdbgexts.h:34
@ DBGKD_MAJOR_NT
Definition: wdbgexts.h:38
@ LoaderBad
Definition: arc.h:177
@ LoaderHALCachedMemory
Definition: arc.h:200
@ LoaderFirmwarePermanent
Definition: arc.h:180
@ LoaderSpecialMemory
Definition: arc.h:196
@ LoaderBBTMemory
Definition: arc.h:197
#define SharedUserData
ULONG NtBuildNumber
Definition: init.c:50
ULONG_PTR DirectoryTableBase
Definition: kd64.h:56
ULONG Flags
Definition: kd64.h:55
PVOID Address
Definition: kd64.h:57
ULONG64 DebuggerDataList
Definition: wdbgexts.h:167
ULONG64 PsLoadedModuleList
Definition: wdbgexts.h:166
USHORT Unused[1]
Definition: wdbgexts.h:164
ULONG64 KeUserCallbackDispatcher
Definition: wdbgexts.h:201
DBGKD_DEBUG_DATA_HEADER64 Header
Definition: wdbgexts.h:192
ULONG64 KernBase
Definition: wdbgexts.h:193
ULONG KdpDefaultRetries
Definition: windbgkd.h:226
Definition: btrfs_drv.h:1876
UNICODE_STRING FullDllName
Definition: btrfs_drv.h:1882
PVOID DllBase
Definition: btrfs_drv.h:1880
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
PSTR ArcBootDeviceName
Definition: arc.h:550
VOID NTAPI KeInitializeTimer(OUT PKTIMER Timer)
Definition: timerobj.c:233
#define LONG_PTR
Definition: treelist.c:79
char * PSTR
Definition: typedefs.h:51
#define NTAPI
Definition: typedefs.h:36
ULONG_PTR SIZE_T
Definition: typedefs.h:80
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
uint16_t * PWCHAR
Definition: typedefs.h:56
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
uint32_t ULONG
Definition: typedefs.h:59
LONGLONG QuadPart
Definition: typedefs.h:114
_Must_inspect_result_ _In_ WDFDEVICE _In_ BOOLEAN _In_opt_ PVOID Tag
Definition: wdfdevice.h:4065
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFIORESLIST _In_ PIO_RESOURCE_DESCRIPTOR Descriptor
Definition: wdfresource.h:342
_Must_inspect_result_ _In_ WDFCMRESLIST List
Definition: wdfresource.h:550
#define DbgKdMaximumStateChange
Definition: windbgkd.h:62
#define DbgKdMinimumStateChange
Definition: windbgkd.h:58
#define DbgKdMaximumManipulate
Definition: windbgkd.h:117
#define DbgKdMinimumManipulate
Definition: windbgkd.h:73
#define ExInitializeWorkItem(Item, Routine, Context)
Definition: exfuncs.h:265
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778
__wchar_t WCHAR
Definition: xmlstorage.h:180
char CHAR
Definition: xmlstorage.h:175