Author: ion
Date: Wed Jan 24 22:48:34 2007
New Revision: 25621
URL:
http://svn.reactos.org/svn/reactos?rev=25621&view=rev
Log:
- Fix ExInitPoolLookasidePointers and ExpInitailizeLookasideLists.
- Implement DbgLoadImageSymbols, Implement DebugService, and ExpLoadBootSymbols during
phase 0 executive init to make KD load the symbols for all the boot drivers, and
optionally breakpoint. Not yet useful since we don't have KD.
- Detect /BURNMEM and /PERFMEM and go all the way to determining the pages required, but
warn the user that we don't support these flags yet.
- Detect FLG_KERNEL_STACK_TRACE_DB and FLG_ENABLE_EXCEPTION_LOGGING and warn that we
don't support these yet.
- Add call to Cm to setup system variables, but disable until cm rewrite.
- Add PnP Manager initialization call and implement PnP Manager Phase 0 initialization
(PiInitPhase0, PpInitializeDeviceReferenceTable), but this isn't used for now.
- Move MmInit2 to Phase 1 initialization, and initailize bootvid there as well.
- Add/Fix missing definitions, prototypes to NDK/NTIFS.
Modified:
trunk/reactos/include/ddk/ntifs.h
trunk/reactos/include/ndk/kdtypes.h
trunk/reactos/include/ndk/rtlfuncs.h
trunk/reactos/lib/rtl/debug.c
trunk/reactos/lib/rtl/i386/debug_asm.S
trunk/reactos/lib/rtl/rtlp.h
trunk/reactos/ntoskrnl/ex/init.c
trunk/reactos/ntoskrnl/ex/lookas.c
trunk/reactos/ntoskrnl/include/internal/io.h
trunk/reactos/ntoskrnl/include/internal/kd.h
trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
trunk/reactos/ntoskrnl/kd/kdmain.c
trunk/reactos/ntoskrnl/ntoskrnl.mc
Modified: trunk/reactos/include/ddk/ntifs.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ddk/ntifs.h?rev=25…
==============================================================================
--- trunk/reactos/include/ddk/ntifs.h (original)
+++ trunk/reactos/include/ddk/ntifs.h Wed Jan 24 22:48:34 2007
@@ -1534,6 +1534,16 @@
PVOID TableContext;
} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
+NTSYSAPI
+VOID
+NTAPI
+RtlInitializeGenericTableAvl(
+ PRTL_AVL_TABLE Table,
+ PRTL_AVL_COMPARE_ROUTINE CompareRoutine,
+ PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine,
+ PRTL_AVL_FREE_ROUTINE FreeRoutine,
+ PVOID TableContext
+);
#if defined(USE_LPC6432)
#define LPC_CLIENT_ID CLIENT_ID64
Modified: trunk/reactos/include/ndk/kdtypes.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/kdtypes.h?rev=…
==============================================================================
--- trunk/reactos/include/ndk/kdtypes.h (original)
+++ trunk/reactos/include/ndk/kdtypes.h Wed Jan 24 22:48:34 2007
@@ -161,4 +161,15 @@
PHANDLE Handles;
} SYSDBG_TRIAGE_DUMP, *PSYSDBG_TRIAGE_DUMP;
+//
+// KD Structures
+//
+typedef struct _KD_SYMBOLS_INFO
+{
+ PVOID BaseOfDll;
+ PVOID ProcessId;
+ ULONG CheckSum;
+ ULONG SizeOfImage;
+} KD_SYMBOLS_INFO, *PKD_SYMBOLS_INFO;
+
#endif // _KDTYPES_H
Modified: trunk/reactos/include/ndk/rtlfuncs.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/rtlfuncs.h?rev…
==============================================================================
--- trunk/reactos/include/ndk/rtlfuncs.h (original)
+++ trunk/reactos/include/ndk/rtlfuncs.h Wed Jan 24 22:48:34 2007
@@ -2502,7 +2502,17 @@
VOID
NTAPI
-DbgBreakPoint(VOID);
+DbgBreakPoint(
+ VOID
+);
+
+NTSTATUS
+NTAPI
+DbgLoadImageSymbols(
+ IN PANSI_STRING Name,
+ IN PVOID Base,
+ IN ULONG ProcessId
+);
//
// Generic Table Functions
Modified: trunk/reactos/lib/rtl/debug.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/debug.c?rev=25621&…
==============================================================================
--- trunk/reactos/lib/rtl/debug.c (original)
+++ trunk/reactos/lib/rtl/debug.c Wed Jan 24 22:48:34 2007
@@ -315,15 +315,37 @@
}
/*
- * @unimplemented
- */
-NTSTATUS
-NTAPI
-DbgLoadImageSymbols(IN PUNICODE_STRING Name,
- IN ULONG Base,
- IN ULONG Unknown3)
-{
- UNIMPLEMENTED;
- return STATUS_NOT_IMPLEMENTED;
+ * @implemented
+ */
+NTSTATUS
+NTAPI
+DbgLoadImageSymbols(IN PANSI_STRING Name,
+ IN PVOID Base,
+ IN ULONG ProcessId)
+{
+ PIMAGE_NT_HEADERS NtHeader;
+ KD_SYMBOLS_INFO SymbolInfo;
+
+ /* Setup the symbol data */
+ SymbolInfo.BaseOfDll = Base;
+ SymbolInfo.ProcessId = UlongToPtr(ProcessId);
+
+ /* Get NT Headers */
+ NtHeader = NULL; //RtlImageNtHeader(Base);
+ if (NtHeader)
+ {
+ /* Get the rest of the data */
+ SymbolInfo.CheckSum = NtHeader->OptionalHeader.CheckSum;
+ SymbolInfo.SizeOfImage = NtHeader->OptionalHeader.SizeOfImage;
+ }
+ else
+ {
+ /* No data available */
+ SymbolInfo.CheckSum = SymbolInfo.SizeOfImage = 0;
+ }
+
+ /* Load the symbols */
+ DebugService2(Name, &SymbolInfo, BREAKPOINT_LOAD_SYMBOLS);
+ return STATUS_SUCCESS;
}
/* EOF */
Modified: trunk/reactos/lib/rtl/i386/debug_asm.S
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/i386/debug_asm.S?r…
==============================================================================
--- trunk/reactos/lib/rtl/i386/debug_asm.S (original)
+++ trunk/reactos/lib/rtl/i386/debug_asm.S Wed Jan 24 22:48:34 2007
@@ -14,6 +14,7 @@
.globl _DbgBreakPointWithStatus@4
.globl _DbgUserBreakPoint@0
.globl _DebugService@20
+.globl _DebugService2@12
.globl _DbgBreakPointNoBugCheck@0
/* FUNCTIONS ***************************************************************/
@@ -36,6 +37,25 @@
mov eax, [esp+4]
int 3
ret 4
+.endfunc
+
+.func DebugService2@12
+_DebugService2@12:
+
+ /* Setup the stack */
+ push ebp
+ mov ebp, esp
+
+ /* Call the interrupt */
+ mov eax, [ebp+16]
+ mov ecx, [ebp+8]
+ mov edx, [ebp+12]
+ int 0x2D
+ int 3
+
+ /* Restore stack */
+ pop ebp
+ ret 12
.endfunc
.func DebugService@20
Modified: trunk/reactos/lib/rtl/rtlp.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/rtl/rtlp.h?rev=25621&a…
==============================================================================
--- trunk/reactos/lib/rtl/rtlp.h (original)
+++ trunk/reactos/lib/rtl/rtlp.h Wed Jan 24 22:48:34 2007
@@ -135,6 +135,12 @@
IN PVOID Argument1,
IN PVOID Argument2);
+NTSTATUS
+NTAPI
+DebugService2(IN PVOID Argument1,
+ IN PVOID Argument2,
+ IN ULONG Service);
+
/* Tags for the String Allocators */
#define TAG_USTR TAG('U', 'S', 'T', 'R')
#define TAG_ASTR TAG('A', 'S', 'T', 'R')
Modified: trunk/reactos/ntoskrnl/ex/init.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/init.c?rev=256…
==============================================================================
--- trunk/reactos/ntoskrnl/ex/init.c (original)
+++ trunk/reactos/ntoskrnl/ex/init.c Wed Jan 24 22:48:34 2007
@@ -82,6 +82,7 @@
&ObjectAttributes);
if (!NT_SUCCESS(Status))
{
+ /* Failed */
KeBugCheckEx(SYMBOLIC_INITIALIZATION_FAILED, Status, 1, 0, 0);
}
@@ -102,6 +103,7 @@
&ObjectAttributes);
if (!NT_SUCCESS(Status))
{
+ /* Failed */
KeBugCheckEx(SYMBOLIC_INITIALIZATION_FAILED, Status, 2, 0, 0);
}
@@ -113,6 +115,7 @@
Status = RtlAnsiStringToUnicodeString(&LinkName, &AnsiName, TRUE);
if (!NT_SUCCESS(Status))
{
+ /* Failed */
KeBugCheckEx(SYMBOLIC_INITIALIZATION_FAILED, Status, 3, 0, 0);
}
@@ -154,6 +157,7 @@
/* Check if creating the link failed */
if (!NT_SUCCESS(Status))
{
+ /* Failed */
KeBugCheckEx(SYMBOLIC_INITIALIZATION_FAILED, Status, 5, 0, 0);
}
@@ -669,6 +673,97 @@
VOID
NTAPI
+ExpLoadBootSymbols(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
+{
+ ULONG i = 0;
+ PLIST_ENTRY NextEntry;
+ ULONG Count, Length;
+ PWCHAR Name;
+ PLDR_DATA_TABLE_ENTRY LdrEntry;
+ BOOLEAN OverFlow = FALSE;
+ CHAR NameBuffer[256];
+ ANSI_STRING SymbolString;
+
+ /* Loop the driver list */
+ NextEntry = LoaderBlock->LoadOrderListHead.Flink;
+ while (NextEntry != &LoaderBlock->LoadOrderListHead)
+ {
+ /* Skip the first two images */
+ if (i >= 2)
+ {
+ /* Get the entry */
+ LdrEntry = CONTAINING_RECORD(NextEntry,
+ LDR_DATA_TABLE_ENTRY,
+ InLoadOrderLinks);
+ if (LdrEntry->FullDllName.Buffer[0] == L'\\')
+ {
+ /* We have a name, read its data */
+ Name = LdrEntry->FullDllName.Buffer;
+ Length = LdrEntry->FullDllName.Length / sizeof(WCHAR);
+
+ /* Check if our buffer can hold it */
+ if (sizeof(NameBuffer) < Length + sizeof(ANSI_NULL))
+ {
+ /* It's too long */
+ OverFlow = TRUE;
+ }
+ else
+ {
+ /* Copy the name */
+ for (Count = 0; Count < Length; Count++, Name++)
+ {
+ /* Copy the character */
+ NameBuffer[Count] = (CHAR)*Name;
+ }
+
+ /* Null-terminate */
+ NameBuffer[Count] = ANSI_NULL;
+ }
+ }
+ else
+ {
+ /* This should be a driver, check if it fits */
+ if (sizeof(NameBuffer) <
+ (sizeof("\\System32\\Drivers\\") +
+ NtSystemRoot.Length / sizeof(WCHAR) - sizeof(UNICODE_NULL) +
+ LdrEntry->BaseDllName.Length / sizeof(WCHAR) +
+ sizeof(ANSI_NULL)))
+ {
+ /* Buffer too small */
+ OverFlow = TRUE;
+ }
+ else
+ {
+ /* Otherwise build the name. HACKED for GCC :( */
+ sprintf(NameBuffer,
+ "%c\\System32\\Drivers\\%S",
+ SharedUserData->NtSystemRoot[2],
+ LdrEntry->BaseDllName.Buffer);
+ }
+ }
+
+ /* Check if the buffer was ok */
+ if (!OverFlow)
+ {
+ /* Initialize the ANSI_STRING for the debugger */
+ RtlInitString(&SymbolString, NameBuffer);
+
+ /* Load the symbols */
+ DbgLoadImageSymbols(&SymbolString, LdrEntry->DllBase, -1);
+ }
+ }
+
+ /* Go to the next entry */
+ i++;
+ NextEntry = NextEntry->Flink;
+ }
+
+ /* Check if we should break after symbol load */
+ if (KdBreakAfterSymbolLoad) DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C);
+}
+
+VOID
+NTAPI
ExpInitializeExecutive(IN ULONG Cpu,
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
@@ -676,6 +771,8 @@
CHAR Buffer[256];
ANSI_STRING AnsiPath;
NTSTATUS Status;
+ PCHAR CommandLine, PerfMem;
+ ULONG PerfMemUsed;
/* Validate Loader */
if (!ExpIsLoaderValid(LoaderBlock))
@@ -728,6 +825,50 @@
/* Set phase to 0 */
ExpInitializationPhase = 0;
+
+ /* Get boot command line */
+ CommandLine = LoaderBlock->LoadOptions;
+ if (CommandLine)
+ {
+ /* Upcase it for comparison and check if we're in performance mode */
+ _strupr(CommandLine);
+ PerfMem = strstr(CommandLine, "PERFMEM");
+ if (PerfMem)
+ {
+ /* Check if the user gave a number of bytes to use */
+ PerfMem = strstr(PerfMem, "=");
+ if (PerfMem)
+ {
+ /* Read the number of pages we'll use */
+ PerfMemUsed = atol(PerfMem + 1) * (1024 * 1024 / PAGE_SIZE);
+ if (PerfMem)
+ {
+ /* FIXME: TODO */
+ DPRINT1("BBT performance mode not yet supported."
+ "/PERFMEM option ignored.\n");
+ }
+ }
+ }
+
+ /* Check if we're burning memory */
+ PerfMem = strstr(CommandLine, "BURNMEMORY");
+ if (PerfMem)
+ {
+ /* Check if the user gave a number of bytes to use */
+ PerfMem = strstr(PerfMem, "=");
+ if (PerfMem)
+ {
+ /* Read the number of pages we'll use */
+ PerfMemUsed = atol(PerfMem + 1) * (1024 * 1024 / PAGE_SIZE);
+ if (PerfMem)
+ {
+ /* FIXME: TODO */
+ DPRINT1("Burnable memory support not yet present."
+ "/BURNMEM option ignored.\n");
+ }
+ }
+ }
+ }
/* Setup NLS Base and offsets */
NlsData = LoaderBlock->NlsData;
@@ -786,11 +927,14 @@
/* Setup bugcheck messages */
KiInitializeBugCheck();
+ /* Setup initial system settings (FIXME: Needs Cm Rewrite) */
+ //CmGetSystemControlValues(CommandLine, &CmControlVector);
+
/* Initialize the executive at phase 0 */
if (!ExInitSystem()) KEBUGCHECK(PHASE0_INITIALIZATION_FAILED);
- /* Break into the Debugger if requested */
- if (KdPollBreakIn()) DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C);
+ /* Load boot symbols */
+ ExpLoadBootSymbols(LoaderBlock);
/* Set system ranges */
SharedUserData->Reserved1 = (ULONG_PTR)MmHighestUserAddress;
@@ -798,6 +942,22 @@
/* Make a copy of the NLS Tables */
ExpInitNls(LoaderBlock);
+
+ /* Check if the user wants a kernel stack trace database */
+ if (NtGlobalFlag & FLG_KERNEL_STACK_TRACE_DB)
+ {
+ /* FIXME: TODO */
+ DPRINT1("Kernel-mode stack trace support not yet present."
+ "FLG_KERNEL_STACK_TRACE_DB flag ignored.\n");
+ }
+
+ /* Check if he wanted exception logging */
+ if (NtGlobalFlag & FLG_ENABLE_EXCEPTION_LOGGING)
+ {
+ /* FIXME: TODO */
+ DPRINT1("Kernel-mode exception logging support not yet present."
+ "FLG_ENABLE_EXCEPTION_LOGGING flag ignored.\n");
+ }
/* Initialize the Handle Table */
ExpInitializeHandleTables();
@@ -827,14 +987,11 @@
/* Load basic Security for other Managers */
if (!SeInit()) KEBUGCHECK(SECURITY_INITIALIZATION_FAILED);
- /* Set up Region Maps, Sections and the Paging File */
- MmInit2();
-
- /* Initialize the boot video. */
- InbvDisplayInitialize();
-
/* Initialize the Process Manager */
if (!PsInitSystem()) KEBUGCHECK(PROCESS_INITIALIZATION_FAILED);
+
+ /* Initialize the PnP Manager */
+ if (!PpInitSystem()) KEBUGCHECK(PP0_INITIALIZATION_FAILED);
/* Initialize the User-Mode Debugging Subsystem */
DbgkInitialize();
@@ -883,12 +1040,16 @@
if (strstr(KeLoaderBlock->LoadOptions, "NOGUIBOOT")) NoGuiBoot = TRUE;
/* Display the boot screen image if not disabled */
+ InbvDisplayInitialize();
if (!ExpInTextModeSetup) InbvDisplayInitialize2(NoGuiBoot);
if (!NoGuiBoot) InbvDisplayBootLogo();
/* Clear the screen to blue and display the boot notice and debug status */
if (NoGuiBoot) ExpDisplayNotice();
KdInitSystem(2, KeLoaderBlock);
+
+ /* Set up Region Maps, Sections and the Paging File */
+ MmInit2();
/* Initialize Power Subsystem in Phase 0 */
PoInit(0, AcpiTableDetected);
Modified: trunk/reactos/ntoskrnl/ex/lookas.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ex/lookas.c?rev=2…
==============================================================================
--- trunk/reactos/ntoskrnl/ex/lookas.c (original)
+++ trunk/reactos/ntoskrnl/ex/lookas.c Wed Jan 24 22:48:34 2007
@@ -24,8 +24,8 @@
KSPIN_LOCK ExpPagedLookasideListLock;
LIST_ENTRY ExSystemLookasideListHead;
LIST_ENTRY ExPoolLookasideListHead;
-NPAGED_LOOKASIDE_LIST ExpSmallNPagedPoolLookasideLists[MAXIMUM_PROCESSORS];
-PAGED_LOOKASIDE_LIST ExpSmallPagedPoolLookasideLists[MAXIMUM_PROCESSORS];
+GENERAL_LOOKASIDE ExpSmallNPagedPoolLookasideLists[MAXIMUM_PROCESSORS];
+GENERAL_LOOKASIDE ExpSmallPagedPoolLookasideLists[MAXIMUM_PROCESSORS];
/* PRIVATE FUNCTIONS *********************************************************/
@@ -63,30 +63,27 @@
ExInitPoolLookasidePointers(VOID)
{
ULONG i;
- PPP_LOOKASIDE_LIST Entry;
- PNPAGED_LOOKASIDE_LIST ListEntry;
- PPAGED_LOOKASIDE_LIST PagedListEntry;
-
- /* Loop for all CPUs */
+ PKPRCB Prcb = KeGetCurrentPrcb();
+ PGENERAL_LOOKASIDE Entry;
+
+ /* Loop for all pool lists */
for (i = 0; i < MAXIMUM_PROCESSORS; i++)
{
/* Initialize the non-paged list */
- ListEntry = &ExpSmallNPagedPoolLookasideLists[i];
- InitializeSListHead(&ListEntry->L.ListHead);
+ Entry = &ExpSmallNPagedPoolLookasideLists[i];
+ InitializeSListHead(&Entry->ListHead);
/* Bind to PRCB */
- Entry = &KeGetCurrentPrcb()->PPPagedLookasideList[i];
- Entry->L = &ListEntry->L;
- Entry->P = &ListEntry->L;
+ Prcb->PPNPagedLookasideList[i].P = Entry;
+ Prcb->PPNPagedLookasideList[i].L = Entry;
/* Initialize the paged list */
- PagedListEntry = &ExpSmallPagedPoolLookasideLists[i];
- InitializeSListHead(&PagedListEntry->L.ListHead);
+ Entry = &ExpSmallPagedPoolLookasideLists[i];
+ InitializeSListHead(&Entry->ListHead);
/* Bind to PRCB */
- Entry = &KeGetCurrentPrcb()->PPNPagedLookasideList[i];
- Entry->L = &PagedListEntry->L;
- Entry->P = &PagedListEntry->L;
+ Prcb->PPPagedLookasideList[i].P = Entry;
+ Prcb->PPPagedLookasideList[i].L = Entry;
}
}
@@ -94,7 +91,7 @@
NTAPI
ExpInitLookasideLists()
{
- ULONG i, j;
+ ULONG i;
/* Initialize locks and lists */
InitializeListHead(&ExpNonPagedLookasideListHead);
@@ -105,20 +102,20 @@
KeInitializeSpinLock(&ExpPagedLookasideListLock);
/* Initialize the system lookaside lists */
- for (i = 0, j = 1; i < (MAXIMUM_PROCESSORS - 1); j++, i++)
+ for (i = 0; i < MAXIMUM_PROCESSORS; i++)
{
/* Initialize the non-paged list */
- ExInitializeSystemLookasideList(&ExpSmallNPagedPoolLookasideLists[i].L,
+ ExInitializeSystemLookasideList(&ExpSmallNPagedPoolLookasideLists[i],
NonPagedPool,
- j * 8,
+ (i + 1) * 8,
TAG('P', 'o', 'o',
'l'),
256,
&ExPoolLookasideListHead);
/* Initialize the paged list */
- ExInitializeSystemLookasideList(&ExpSmallPagedPoolLookasideLists[i].L,
+ ExInitializeSystemLookasideList(&ExpSmallPagedPoolLookasideLists[i],
PagedPool,
- j * 8,
+ (i + 1) * 8,
TAG('P', 'o', 'o',
'l'),
256,
&ExPoolLookasideListHead);
Modified: trunk/reactos/ntoskrnl/include/internal/io.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/…
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/io.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/io.h Wed Jan 24 22:48:34 2007
@@ -441,6 +441,12 @@
VOID
);
+BOOLEAN
+NTAPI
+PpInitSystem(
+ VOID
+);
+
VOID
PnpInit2(
VOID
Modified: trunk/reactos/ntoskrnl/include/internal/kd.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/…
==============================================================================
--- trunk/reactos/ntoskrnl/include/internal/kd.h (original)
+++ trunk/reactos/ntoskrnl/include/internal/kd.h Wed Jan 24 22:48:34 2007
@@ -15,6 +15,7 @@
extern KD_PORT_INFORMATION GdbPortInfo;
extern BOOLEAN _KdDebuggerEnabled;
extern BOOLEAN _KdDebuggerNotPresent;
+extern BOOLEAN KdBreakAfterSymbolLoad;
BOOLEAN
NTAPI
Modified: trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.…
==============================================================================
--- trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c (original)
+++ trunk/reactos/ntoskrnl/io/pnpmgr/pnpmgr.c Wed Jan 24 22:48:34 2007
@@ -19,6 +19,11 @@
PDEVICE_NODE IopRootDeviceNode;
KSPIN_LOCK IopDeviceTreeLock;
+ERESOURCE PpRegistryDeviceResource;
+KGUARDED_MUTEX PpDeviceReferenceTableLock;
+RTL_AVL_TABLE PpDeviceReferenceTable;
+
+extern ULONG ExpInitializationPhase;
/* DATA **********************************************************************/
@@ -3317,5 +3322,90 @@
}
}
+RTL_GENERIC_COMPARE_RESULTS
+NTAPI
+PiCompareInstancePath(IN PRTL_AVL_TABLE Table,
+ IN PVOID FirstStruct,
+ IN PVOID SecondStruct)
+{
+ /* FIXME: TODO */
+ KEBUGCHECK(0);
+ return 0;
+}
+
+//
+// The allocation function is called by the generic table package whenever
+// it needs to allocate memory for the table.
+//
+
+PVOID
+NTAPI
+PiAllocateGenericTableEntry(IN PRTL_AVL_TABLE Table,
+ IN CLONG ByteSize)
+{
+ /* FIXME: TODO */
+ KEBUGCHECK(0);
+ return NULL;
+}
+
+VOID
+NTAPI
+PiFreeGenericTableEntry(IN PRTL_AVL_TABLE Table,
+ IN PVOID Buffer)
+{
+ /* FIXME: TODO */
+ KEBUGCHECK(0);
+}
+
+VOID
+NTAPI
+PpInitializeDeviceReferenceTable(VOID)
+{
+ /* Setup the guarded mutex and AVL table */
+ KeInitializeGuardedMutex(&PpDeviceReferenceTableLock);
+ RtlInitializeGenericTableAvl(&PpDeviceReferenceTable,
+ PiCompareInstancePath,
+ PiAllocateGenericTableEntry,
+ PiFreeGenericTableEntry,
+ NULL);
+}
+
+BOOLEAN
+NTAPI
+PiInitPhase0(VOID)
+{
+ /* Initialize the resource when accessing device registry data */
+ ExInitializeResourceLite(&PpRegistryDeviceResource);
+
+ /* Setup the device reference AVL table */
+ PpInitializeDeviceReferenceTable();
+ return TRUE;
+}
+
+BOOLEAN
+NTAPI
+PpInitSystem(VOID)
+{
+ /* Check the initialization phase */
+ switch (ExpInitializationPhase)
+ {
+ case 0:
+
+ /* Do Phase 0 */
+ return PiInitPhase0();
+
+ case 1:
+
+ /* Do Phase 1 */
+ return FALSE;
+ //return PiInitPhase1();
+
+ default:
+
+ /* Don't know any other phase! Bugcheck! */
+ KeBugCheck(UNEXPECTED_INITIALIZATION_CALL);
+ return FALSE;
+ }
+}
/* EOF */
Modified: trunk/reactos/ntoskrnl/kd/kdmain.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/kd/kdmain.c?rev=2…
==============================================================================
--- trunk/reactos/ntoskrnl/kd/kdmain.c (original)
+++ trunk/reactos/ntoskrnl/kd/kdmain.c Wed Jan 24 22:48:34 2007
@@ -17,6 +17,7 @@
BOOLEAN KdEnteredDebugger = FALSE;
BOOLEAN KdDebuggerNotPresent = TRUE;
BOOLEAN KiEnableTimerWatchdog = FALSE;
+BOOLEAN KdBreakAfterSymbolLoad = FALSE;
ULONG KiBugCheckData;
BOOLEAN KdpBreakPending;
VOID STDCALL PspDumpThreads(BOOLEAN SystemThreads);
Modified: trunk/reactos/ntoskrnl/ntoskrnl.mc
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ntoskrnl.mc?rev=2…
==============================================================================
--- trunk/reactos/ntoskrnl/ntoskrnl.mc (original)
+++ trunk/reactos/ntoskrnl/ntoskrnl.mc Wed Jan 24 22:48:34 2007
@@ -1081,6 +1081,14 @@
SPIN_LOCK_INIT_FAILURE
.
+MessageId=0x8F
+Severity=Success
+Facility=System
+SymbolicName=PP0_INITIALIZATION_FAILED
+Language=English
+PP0_INITIALIZATION_FAILED
+.
+
MessageId=0x94
Severity=Success
Facility=System