From b9cd3f2d9da480c2a646b31466e29b48ae4d4270 Mon Sep 17 00:00:00 2001 From: Alex Ionescu Date: Mon, 19 Feb 2007 18:52:23 +0000 Subject: [PATCH] - Create GCC_ULONG64 type to hack around a bug in GCC which is incapable of creating entries for externals at compile-time for 64-bit pointers. - Rename NameSpaceRoot to ObpRootDirectoryObject, IopLogListHead to IopErrorLogListHead, BugcheckCallbackListHead to KeBugcheckCallbackListHead, BugcheckReasonCallbackListHead to KeBugcheckReasonCallbackListHead, ObTypeObjectType to ObpTypeObjectType. - Fill out KdDebuggerDataBlock with the variables that ROS currently supports. Most Mm variables we don't have yet -- it's unknown how much this will hurt WinDBG compatibility/functionality. - Add KdPrint circular buffer and buffer location/data variables. svn path=/branches/alex-kd-branch/; revision=25845 --- reactos/include/ndk/asm.h | 1 + reactos/include/psdk/wdbgexts.h | 170 +++++++++++++------------ reactos/lib/rtl/i386/debug_asm.S | 3 + reactos/ntoskrnl/cm/regobj.c | 6 +- reactos/ntoskrnl/ex/init.c | 10 ++ reactos/ntoskrnl/include/internal/ex.h | 3 + reactos/ntoskrnl/include/internal/io.h | 1 + reactos/ntoskrnl/include/internal/ke.h | 4 +- reactos/ntoskrnl/include/internal/ob.h | 4 +- reactos/ntoskrnl/io/iomgr/error.c | 10 +- reactos/ntoskrnl/io/iomgr/iomgr.c | 4 +- reactos/ntoskrnl/kd64/kddata.c | 159 ++++++++++++++++++++++- reactos/ntoskrnl/ke/bug.c | 10 +- reactos/ntoskrnl/ke/krnlinit.c | 4 +- reactos/ntoskrnl/ob/obinit.c | 6 +- reactos/ntoskrnl/ob/oblife.c | 14 +- reactos/ntoskrnl/ob/obname.c | 18 +-- 17 files changed, 299 insertions(+), 128 deletions(-) diff --git a/reactos/include/ndk/asm.h b/reactos/include/ndk/asm.h index 88cebfcac65..55c96eaacdd 100644 --- a/reactos/include/ndk/asm.h +++ b/reactos/include/ndk/asm.h @@ -503,6 +503,7 @@ Author: #define CBSTACK_STACK 0x0 #define CBSTACK_TRAP_FRAME 0x4 #define CBSTACK_CALLBACK_STACK 0x8 +#define CBSTACK_EBP 0x18 #define CBSTACK_RESULT 0x20 #define CBSTACK_RESULT_LENGTH 0x24 diff --git a/reactos/include/psdk/wdbgexts.h b/reactos/include/psdk/wdbgexts.h index 81a40fa551d..0f474efd1bf 100644 --- a/reactos/include/psdk/wdbgexts.h +++ b/reactos/include/psdk/wdbgexts.h @@ -47,92 +47,98 @@ typedef struct _DBGKD_DEBUG_DATA_HEADER64 ULONG Size; } DBGKD_DEBUG_DATA_HEADER64, *PDBGKD_DEBUG_DATA_HEADER64; +typedef union _GCC_ULONG64 +{ + ULONG_PTR Pointer; + ULONG64 RealPointer; +} GCC_ULONG64, *PGCC_ULONG64; + typedef struct _KDDEBUGGER_DATA64 { DBGKD_DEBUG_DATA_HEADER64 Header; ULONG64 KernBase; - ULONG64 BreakpointWithStatus; + GCC_ULONG64 BreakpointWithStatus; ULONG64 SavedContext; USHORT ThCallbackStack; USHORT NextCallback; USHORT FramePointer; USHORT PaeEnabled:1; - ULONG64 KiCallUserMode; - ULONG64 KeUserCallbackDispatcher; - ULONG64 PsLoadedModuleList; - ULONG64 PsActiveProcessHead; - ULONG64 PspCidTable; - ULONG64 ExpSystemResourcesList; - ULONG64 ExpPagedPoolDescriptor; - ULONG64 ExpNumberOfPagedPools; - ULONG64 KeTimeIncrement; - ULONG64 KeBugCheckCallbackListHead; - ULONG64 KiBugcheckData; - ULONG64 IopErrorLogListHead; - ULONG64 ObpRootDirectoryObject; - ULONG64 ObpTypeObjectType; - ULONG64 MmSystemCacheStart; - ULONG64 MmSystemCacheEnd; - ULONG64 MmSystemCacheWs; - ULONG64 MmPfnDatabase; - ULONG64 MmSystemPtesStart; - ULONG64 MmSystemPtesEnd; - ULONG64 MmSubsectionBase; - ULONG64 MmNumberOfPagingFiles; - ULONG64 MmLowestPhysicalPage; - ULONG64 MmHighestPhysicalPage; - ULONG64 MmNumberOfPhysicalPages; - ULONG64 MmMaximumNonPagedPoolInBytes; - ULONG64 MmNonPagedSystemStart; - ULONG64 MmNonPagedPoolStart; - ULONG64 MmNonPagedPoolEnd; - ULONG64 MmPagedPoolStart; - ULONG64 MmPagedPoolEnd; - ULONG64 MmPagedPoolInformation; + GCC_ULONG64 KiCallUserMode; + GCC_ULONG64 KeUserCallbackDispatcher; + GCC_ULONG64 PsLoadedModuleList; + GCC_ULONG64 PsActiveProcessHead; + GCC_ULONG64 PspCidTable; + GCC_ULONG64 ExpSystemResourcesList; + GCC_ULONG64 ExpPagedPoolDescriptor; + GCC_ULONG64 ExpNumberOfPagedPools; + GCC_ULONG64 KeTimeIncrement; + GCC_ULONG64 KeBugCheckCallbackListHead; + GCC_ULONG64 KiBugcheckData; + GCC_ULONG64 IopErrorLogListHead; + GCC_ULONG64 ObpRootDirectoryObject; + GCC_ULONG64 ObpTypeObjectType; + GCC_ULONG64 MmSystemCacheStart; + GCC_ULONG64 MmSystemCacheEnd; + GCC_ULONG64 MmSystemCacheWs; + GCC_ULONG64 MmPfnDatabase; + GCC_ULONG64 MmSystemPtesStart; + GCC_ULONG64 MmSystemPtesEnd; + GCC_ULONG64 MmSubsectionBase; + GCC_ULONG64 MmNumberOfPagingFiles; + GCC_ULONG64 MmLowestPhysicalPage; + GCC_ULONG64 MmHighestPhysicalPage; + GCC_ULONG64 MmNumberOfPhysicalPages; + GCC_ULONG64 MmMaximumNonPagedPoolInBytes; + GCC_ULONG64 MmNonPagedSystemStart; + GCC_ULONG64 MmNonPagedPoolStart; + GCC_ULONG64 MmNonPagedPoolEnd; + GCC_ULONG64 MmPagedPoolStart; + GCC_ULONG64 MmPagedPoolEnd; + GCC_ULONG64 MmPagedPoolInformation; ULONG64 MmPageSize; - ULONG64 MmSizeOfPagedPoolInBytes; - ULONG64 MmTotalCommitLimit; - ULONG64 MmTotalCommittedPages; - ULONG64 MmSharedCommit; - ULONG64 MmDriverCommit; - ULONG64 MmProcessCommit; - ULONG64 MmPagedPoolCommit; - ULONG64 MmExtendedCommit; - ULONG64 MmZeroedPageListHead; - ULONG64 MmFreePageListHead; - ULONG64 MmStandbyPageListHead; - ULONG64 MmModifiedPageListHead; - ULONG64 MmModifiedNoWritePageListHead; - ULONG64 MmAvailablePages; - ULONG64 MmResidentAvailablePages; - ULONG64 PoolTrackTable; - ULONG64 NonPagedPoolDescriptor; - ULONG64 MmHighestUserAddress; - ULONG64 MmSystemRangeStart; - ULONG64 MmUserProbeAddress; - ULONG64 KdPrintCircularBuffer; - ULONG64 KdPrintCircularBufferEnd; - ULONG64 KdPrintWritePointer; - ULONG64 KdPrintRolloverCount; - ULONG64 MmLoadedUserImageList; - ULONG64 NtBuildLab; - ULONG64 KiNormalSystemCall; - ULONG64 KiProcessorBlock; - ULONG64 MmUnloadedDrivers; - ULONG64 MmLastUnloadedDriver; - ULONG64 MmTriageActionTaken; - ULONG64 MmSpecialPoolTag; - ULONG64 KernelVerifier; - ULONG64 MmVerifierData; - ULONG64 MmAllocatedNonPagedPool; - ULONG64 MmPeakCommitment; - ULONG64 MmTotalCommitLimitMaximum; - ULONG64 CmNtCSDVersion; - ULONG64 MmPhysicalMemoryBlock; - ULONG64 MmSessionBase; - ULONG64 MmSessionSize; - ULONG64 MmSystemParentTablePage; - ULONG64 MmVirtualTranslationBase; + GCC_ULONG64 MmSizeOfPagedPoolInBytes; + GCC_ULONG64 MmTotalCommitLimit; + GCC_ULONG64 MmTotalCommittedPages; + GCC_ULONG64 MmSharedCommit; + GCC_ULONG64 MmDriverCommit; + GCC_ULONG64 MmProcessCommit; + GCC_ULONG64 MmPagedPoolCommit; + GCC_ULONG64 MmExtendedCommit; + GCC_ULONG64 MmZeroedPageListHead; + GCC_ULONG64 MmFreePageListHead; + GCC_ULONG64 MmStandbyPageListHead; + GCC_ULONG64 MmModifiedPageListHead; + GCC_ULONG64 MmModifiedNoWritePageListHead; + GCC_ULONG64 MmAvailablePages; + GCC_ULONG64 MmResidentAvailablePages; + GCC_ULONG64 PoolTrackTable; + GCC_ULONG64 NonPagedPoolDescriptor; + GCC_ULONG64 MmHighestUserAddress; + GCC_ULONG64 MmSystemRangeStart; + GCC_ULONG64 MmUserProbeAddress; + GCC_ULONG64 KdPrintCircularBuffer; + GCC_ULONG64 KdPrintCircularBufferEnd; + GCC_ULONG64 KdPrintWritePointer; + GCC_ULONG64 KdPrintRolloverCount; + GCC_ULONG64 MmLoadedUserImageList; + GCC_ULONG64 NtBuildLab; + GCC_ULONG64 KiNormalSystemCall; + GCC_ULONG64 KiProcessorBlock; + GCC_ULONG64 MmUnloadedDrivers; + GCC_ULONG64 MmLastUnloadedDriver; + GCC_ULONG64 MmTriageActionTaken; + GCC_ULONG64 MmSpecialPoolTag; + GCC_ULONG64 KernelVerifier; + GCC_ULONG64 MmVerifierData; + GCC_ULONG64 MmAllocatedNonPagedPool; + GCC_ULONG64 MmPeakCommitment; + GCC_ULONG64 MmTotalCommitLimitMaximum; + GCC_ULONG64 CmNtCSDVersion; + GCC_ULONG64 MmPhysicalMemoryBlock; + GCC_ULONG64 MmSessionBase; + GCC_ULONG64 MmSessionSize; + GCC_ULONG64 MmSystemParentTablePage; + GCC_ULONG64 MmVirtualTranslationBase; USHORT OffsetKThreadNextProcessor; USHORT OffsetKThreadTeb; USHORT OffsetKThreadKernelStack; @@ -154,9 +160,9 @@ typedef struct _KDDEBUGGER_DATA64 USHORT OffsetPrcbProcStateContext; USHORT OffsetPrcbNumber; USHORT SizeEThread; - ULONG64 KdPrintCircularBufferPtr; - ULONG64 KdPrintBufferSize; - ULONG64 KeLoaderBlock; + GCC_ULONG64 KdPrintCircularBufferPtr; + GCC_ULONG64 KdPrintBufferSize; + GCC_ULONG64 KeLoaderBlock; USHORT SizePcr; USHORT OffsetPcrSelfPcr; USHORT OffsetPcrCurrentPrcb; @@ -177,9 +183,9 @@ typedef struct _KDDEBUGGER_DATA64 USHORT GdtTss; USHORT Gdt64R3CmCode; USHORT Gdt64R3CmTeb; - ULONG64 IopNumTriageDumpDataBlocks; - ULONG64 IopTriageDumpDataBlocks; - ULONG64 VfCrashDataBlock; + GCC_ULONG64 IopNumTriageDumpDataBlocks; + GCC_ULONG64 IopTriageDumpDataBlocks; + GCC_ULONG64 VfCrashDataBlock; } KDDEBUGGER_DATA64, *PKDDEBUGGER_DATA64; #endif diff --git a/reactos/lib/rtl/i386/debug_asm.S b/reactos/lib/rtl/i386/debug_asm.S index f41934b8a0e..8ec4d862c97 100644 --- a/reactos/lib/rtl/i386/debug_asm.S +++ b/reactos/lib/rtl/i386/debug_asm.S @@ -16,6 +16,7 @@ .globl _DebugService@20 .globl _DebugService2@12 .globl _DbgBreakPointNoBugCheck@0 +.globl _RtlpBreakWithStatusInstruction@0 /* FUNCTIONS ***************************************************************/ @@ -35,6 +36,8 @@ _DbgUserBreakPoint@0: .func DbgBreakPointWithStatus@4 _DbgBreakPointWithStatus@4: mov eax, [esp+4] + +_RtlpBreakWithStatusInstruction@0: int 3 ret 4 .endfunc diff --git a/reactos/ntoskrnl/cm/regobj.c b/reactos/ntoskrnl/cm/regobj.c index 2dc92f907fd..a762a279a51 100644 --- a/reactos/ntoskrnl/cm/regobj.c +++ b/reactos/ntoskrnl/cm/regobj.c @@ -172,11 +172,11 @@ CmFindObject(POBJECT_CREATE_INFORMATION ObjectCreateInfo, if (ObjectCreateInfo->RootDirectory == NULL) { - ObReferenceObjectByPointer(NameSpaceRoot, + ObReferenceObjectByPointer(ObpRootDirectoryObject, DIRECTORY_TRAVERSE, CmiKeyType, ObjectCreateInfo->ProbeMode); - CurrentObject = NameSpaceRoot; + CurrentObject = ObpRootDirectoryObject; } else { @@ -312,7 +312,7 @@ Next: if (Status == STATUS_REPARSE) { /* reparse the object path */ - NextObject = NameSpaceRoot; + NextObject = ObpRootDirectoryObject; current = PathString.Buffer; ObReferenceObjectByPointer(NextObject, diff --git a/reactos/ntoskrnl/ex/init.c b/reactos/ntoskrnl/ex/init.c index 0112e79fbe6..6c1a74e4660 100644 --- a/reactos/ntoskrnl/ex/init.c +++ b/reactos/ntoskrnl/ex/init.c @@ -24,9 +24,19 @@ ULONG NtMajorVersion = 5; ULONG NtMinorVersion = 0; ULONG NtOSCSDVersion = BUILD_OSCSDVERSION(4, 0); ULONG NtBuildNumber = KERNEL_VERSION_BUILD; + +/* NT System Info */ ULONG NtGlobalFlag; ULONG ExSuiteMask; +/* Cm Version Info */ +ULONG CmNtSpBuildNumber; +ULONG CmNtCSDVersion; +ULONG CmNtCSDReleaseType; +UNICODE_STRING CmVersionString; +UNICODE_STRING CmCSDVersionString; +CHAR NtBuildLab[] = KERNEL_VERSION_BUILD_STR; + /* Init flags and settings */ ULONG ExpInitializationPhase; BOOLEAN ExpInTextModeSetup; diff --git a/reactos/ntoskrnl/include/internal/ex.h b/reactos/ntoskrnl/include/internal/ex.h index 7e8716fcba3..ced94dc57a7 100644 --- a/reactos/ntoskrnl/include/internal/ex.h +++ b/reactos/ntoskrnl/include/internal/ex.h @@ -18,9 +18,12 @@ extern ERESOURCE ExpFirmwareTableResource; extern LIST_ENTRY ExpFirmwareTableProviderListHead; extern BOOLEAN ExpIsWinPEMode; extern ULONG NtGlobalFlag; +extern LIST_ENTRY ExpSystemResourcesList; ULONG ExpAnsiCodePageDataOffset, ExpOemCodePageDataOffset; ULONG ExpUnicodeCaseTableDataOffset; PVOID ExpNlsSectionPointer; +extern CHAR NtBuildLab[]; +extern ULONG CmNtCSDVersion; typedef struct _EXHANDLE { diff --git a/reactos/ntoskrnl/include/internal/io.h b/reactos/ntoskrnl/include/internal/io.h index 30d31cd9d8e..5df46cded3f 100644 --- a/reactos/ntoskrnl/include/internal/io.h +++ b/reactos/ntoskrnl/include/internal/io.h @@ -968,6 +968,7 @@ extern GENERIC_MAPPING IopCompletionMapping; extern GENERIC_MAPPING IopFileMapping; extern POBJECT_TYPE _IoFileObjectType; extern HAL_DISPATCH _HalDispatchTable; +extern LIST_ENTRY IopErrorLogListHead; // // Inlined Functions diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index df56dd84f36..736a1dec81d 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -126,7 +126,7 @@ extern LARGE_INTEGER KiTimeIncrementReciprocal; extern UCHAR KiTimeIncrementShiftCount; extern ULONG KiTimeLimitIsrMicroseconds; extern ULONG KiServiceLimit; -extern LIST_ENTRY BugcheckCallbackListHead, BugcheckReasonCallbackListHead; +extern LIST_ENTRY KeBugcheckCallbackListHead, KeBugcheckReasonCallbackListHead; extern KSPIN_LOCK BugCheckCallbackLock; extern KDPC KiTimerExpireDpc; extern KTIMER_TABLE_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE]; @@ -150,6 +150,8 @@ extern PVOID KeRaiseUserExceptionDispatcher; extern UCHAR KiDebugRegisterTrapOffsets[9]; extern UCHAR KiDebugRegisterContextOffsets[9]; extern ULONG KiFreezeFlag; +extern ULONG KeTimeIncrement; +extern PVOID KiBugCheckData; /* MACROS *************************************************************************/ diff --git a/reactos/ntoskrnl/include/internal/ob.h b/reactos/ntoskrnl/include/internal/ob.h index a4e7fa9b889..176cb1df99f 100644 --- a/reactos/ntoskrnl/include/internal/ob.h +++ b/reactos/ntoskrnl/include/internal/ob.h @@ -503,8 +503,8 @@ extern ULONG ObpTraceLevel; extern KEVENT ObpDefaultObject; extern POBJECT_TYPE ObpTypeObjectType; extern POBJECT_TYPE ObSymbolicLinkType; -extern POBJECT_TYPE ObTypeObjectType; -extern POBJECT_DIRECTORY NameSpaceRoot; +extern POBJECT_TYPE ObpTypeObjectType; +extern POBJECT_DIRECTORY ObpRootDirectoryObject; extern POBJECT_DIRECTORY ObpTypeDirectoryObject; extern PHANDLE_TABLE ObpKernelHandleTable; extern WORK_QUEUE_ITEM ObpReaperWorkItem; diff --git a/reactos/ntoskrnl/io/iomgr/error.c b/reactos/ntoskrnl/io/iomgr/error.c index 84382def016..d64de877066 100644 --- a/reactos/ntoskrnl/io/iomgr/error.c +++ b/reactos/ntoskrnl/io/iomgr/error.c @@ -23,7 +23,7 @@ typedef struct _IOP_ERROR_LOG_WORKER_DPC /* GLOBALS *******************************************************************/ LONG IopTotalLogSize; -LIST_ENTRY IopLogListHead; +LIST_ENTRY IopErrorLogListHead; KSPIN_LOCK IopLogListLock; BOOLEAN IopLogWorkerRunning; @@ -59,7 +59,7 @@ IopGetErrorLogEntry(VOID) /* Acquire the lock and check if the list is empty */ KeAcquireSpinLock(&IopLogListLock, &OldIrql); - if (IsListEmpty(&IopLogListHead)) + if (IsListEmpty(&IopErrorLogListHead)) { /* List is empty, disable the worker and return NULL */ IopLogWorkerRunning = FALSE; @@ -68,7 +68,7 @@ IopGetErrorLogEntry(VOID) else { /* Otherwise, remove an entry */ - ListEntry = RemoveHeadList(&IopLogListHead); + ListEntry = RemoveHeadList(&IopErrorLogListHead); } /* Release the lock and return the entry */ @@ -420,7 +420,7 @@ IopLogWorker(IN PVOID Parameter) if (!NT_SUCCESS(Status)) { /* Requeue log message and restart the worker */ - ExInterlockedInsertTailList(&IopLogListHead, + ExInterlockedInsertTailList(&IopErrorLogListHead, &LogEntry->ListEntry, &IopLogListLock); IopLogWorkerRunning = FALSE; @@ -581,7 +581,7 @@ IoWriteErrorLogEntry(IN PVOID ElEntry) /* Acquire the lock and insert this write in the list */ KeAcquireSpinLock(&IopLogListLock, &Irql); - InsertHeadList(&IopLogListHead, &LogEntry->ListEntry); + InsertHeadList(&IopErrorLogListHead, &LogEntry->ListEntry); /* Check if the worker is runnign */ if (!IopLogWorkerRunning) diff --git a/reactos/ntoskrnl/io/iomgr/iomgr.c b/reactos/ntoskrnl/io/iomgr/iomgr.c index 7b7009379b3..b0057606c2a 100644 --- a/reactos/ntoskrnl/io/iomgr/iomgr.c +++ b/reactos/ntoskrnl/io/iomgr/iomgr.c @@ -70,7 +70,7 @@ extern LIST_ENTRY DriverBootReinitListHead; extern LIST_ENTRY DriverReinitListHead; extern LIST_ENTRY PnpNotifyListHead; extern LIST_ENTRY FsChangeNotifyListHead; -extern LIST_ENTRY IopLogListHead; +extern LIST_ENTRY IopErrorLogListHead; extern LIST_ENTRY IopTimerQueueHead; extern KDPC IopTimerDpc; extern KTIMER IopTimer; @@ -467,7 +467,7 @@ IoInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock) InitializeListHead(&PnpNotifyListHead); InitializeListHead(&ShutdownListHead); InitializeListHead(&FsChangeNotifyListHead); - InitializeListHead(&IopLogListHead); + InitializeListHead(&IopErrorLogListHead); KeInitializeSpinLock(&CancelSpinLock); KeInitializeSpinLock(&IoVpbLock); KeInitializeSpinLock(&IoStatisticsLock); diff --git a/reactos/ntoskrnl/kd64/kddata.c b/reactos/ntoskrnl/kd64/kddata.c index e522653462e..e0659e647a9 100644 --- a/reactos/ntoskrnl/kd64/kddata.c +++ b/reactos/ntoskrnl/kd64/kddata.c @@ -12,6 +12,8 @@ #define NDEBUG #include +VOID NTAPI RtlpBreakWithStatusInstruction(VOID); + /* GLOBALS *******************************************************************/ // @@ -35,13 +37,6 @@ DBGKD_GET_VERSION64 KdVersionBlock = 0 }; -// -// Debugger Data -// -KDDEBUGGER_DATA64 KdDebuggerDataBlock; -LIST_ENTRY KdpDebuggerDataListHead; -KSPIN_LOCK KdpDataSpinLock; - // // Debugger State // @@ -88,6 +83,16 @@ LARGE_INTEGER KdTimerStop, KdTimerStart, KdTimerDifference; CHAR KdpMessageBuffer[4096]; CHAR KdpPathBuffer[4096]; +// +// KdPrint Buffers +// +CHAR KdPrintDefaultCircularBuffer[0x8000]; +PCHAR KdPrintWritePointer = KdPrintDefaultCircularBuffer; +ULONG KdPrintRolloverCount; +PCHAR KdPrintCircularBuffer = KdPrintDefaultCircularBuffer; +ULONG KdPrintBufferSize = sizeof(KdPrintDefaultCircularBuffer); +ULONG KdPrintBufferChanges = 0; + // // Debug Filter Masks // @@ -309,3 +314,143 @@ PULONG KdComponentTable[104] = }; ULONG KdComponentTableSize = sizeof(KdComponentTable); + +// +// Debugger Data +// +LIST_ENTRY KdpDebuggerDataListHead; +KSPIN_LOCK KdpDataSpinLock; +KDDEBUGGER_DATA64 KdDebuggerDataBlock = +{ + {{0}}, + 0, + {PtrToUlong(RtlpBreakWithStatusInstruction)}, + 0, + FIELD_OFFSET(KTHREAD, CallbackStack), + CBSTACK_CALLBACK_STACK, + CBSTACK_EBP, + 0, + {PtrToUlong(KiCallUserMode)}, + {0}, + {PtrToUlong(&PsLoadedModuleList)}, + {PtrToUlong(&PsActiveProcessHead)}, + {PtrToUlong(&PspCidTable)}, + {PtrToUlong(&ExpSystemResourcesList)}, + {0}, // ExpPagedPoolDescriptor + {0}, // ExpNumberOfPagedPools + {PtrToUlong(&KeTimeIncrement)}, + {PtrToUlong(&KeBugcheckCallbackListHead)}, + {PtrToUlong(&KiBugCheckData)}, + {PtrToUlong(&IopErrorLogListHead)}, + {PtrToUlong(&ObpRootDirectoryObject)}, + {PtrToUlong(&ObpTypeObjectType)}, + {0}, // MmSystemCacheStart + {0}, // MmSystemCacheEnd + {0}, // MmSystemCacheWs + {0}, // MmPfnDatabase + {0}, // MmSystemPtesStart + {0}, // MmSystemPtesEnd + {0}, // MmSubsectionBase + {0}, // MmNumberOfPagingFiles + {0}, // MmLowestPhysicalPage + {0}, // MmHighestPhysicalPage + {0}, // MmNumberOfPhysicalPages + {0}, // MmMaximumNonPagedPoolInBytes + {0}, // MmNonPagedSystemStart + {0}, // MmNonPagedPoolStart + {0}, // MmNonPagedPoolEnd + {0}, // MmPagedPoolStart + {0}, // MmPagedPoolEnd + {0}, // MmPagedPoolInfo + PAGE_SIZE, + {0}, // MmSizeOfPagedPoolInBytes + {0}, // MmTotalCommitLimit + {0}, // MmTotalCommittedPages + {0}, // MmSharedCommit + {0}, // MmDriverCommit + {0}, // MmProcessCommit + {0}, // MmPagedPoolCommit + {0}, + {0}, // MmZeroedPageListHead + {0}, // MmFreePageListHead + {0}, // MmStandbyPageListHead + {0}, // MmModifiedPageListHead + {0}, // MmModifiedNoWritePageListHead + {0}, // MmAvailablePages + {0}, // MmResidentAvailablePages + {0}, // PoolTrackTable + {0}, // NonPagedPoolDescriptor + {PtrToUlong(&MmHighestUserAddress)}, + {PtrToUlong(&MmSystemRangeStart)}, + {PtrToUlong(&MmUserProbeAddress)}, + {PtrToUlong(KdPrintDefaultCircularBuffer)}, + {PtrToUlong(KdPrintDefaultCircularBuffer + 1)}, + {PtrToUlong(&KdPrintWritePointer)}, + {PtrToUlong(&KdPrintRolloverCount)}, + {0}, // MmLoadedUserImageList + {PtrToUlong(&NtBuildLab)}, + {0}, + {PtrToUlong(KiProcessorBlock)}, + {0}, // MmUnloadedDrivers + {0}, // MmLastUnloadedDrivers + {0}, // MmTriageActionTaken + {0}, // MmSpecialPoolTag + {0}, // KernelVerifier + {0}, // MmVerifierData + {0}, // MmAllocatedNonPagedPool + {0}, // MmPeakCommitment + {0}, // MmtotalCommitLimitMaximum + {PtrToUlong(&CmNtCSDVersion)}, + {0}, // MmPhysicalMemoryBlock + {0}, // MmSessionBase + {0}, // MmSessionSize + {0}, + {0}, + FIELD_OFFSET(KTHREAD, NextProcessor), + FIELD_OFFSET(KTHREAD, Teb), + FIELD_OFFSET(KTHREAD, KernelStack), + FIELD_OFFSET(KTHREAD, InitialStack), + FIELD_OFFSET(KTHREAD, ApcState.Process), + FIELD_OFFSET(KTHREAD, State), + 0, + 0, + sizeof(EPROCESS), + FIELD_OFFSET(EPROCESS, Peb), + FIELD_OFFSET(EPROCESS, InheritedFromUniqueProcessId), + FIELD_OFFSET(EPROCESS, Pcb.DirectoryTableBase), + sizeof(KPRCB), + FIELD_OFFSET(KPRCB, DpcRoutineActive), + FIELD_OFFSET(KPRCB, CurrentThread), + FIELD_OFFSET(KPRCB, MHz), + FIELD_OFFSET(KPRCB, CpuType), + FIELD_OFFSET(KPRCB, VendorString), + FIELD_OFFSET(KPRCB, ProcessorState.ContextFrame), + FIELD_OFFSET(KPRCB, Number), + sizeof(ETHREAD), + {PtrToUlong(KdPrintDefaultCircularBuffer)}, + {PtrToUlong(&KdPrintBufferSize)}, + {PtrToUlong(&KeLoaderBlock)}, + sizeof(KIPCR) + sizeof(KPRCB), + FIELD_OFFSET(KIPCR, Self), + FIELD_OFFSET(KPCR, Prcb), + FIELD_OFFSET(KIPCR, PrcbData), + 0, + 0, + 0, + 0, + 0, + FIELD_OFFSET(KIPCR, PrcbData) + + FIELD_OFFSET(KPRCB, ProcessorState.SpecialRegisters), + KGDT_R0_CODE, + KGDT_R0_DATA, + KGDT_R0_PCR, + KGDT_R3_CODE, + KGDT_R3_DATA, + KGDT_R3_TEB, + KGDT_LDT, + KGDT_TSS, + 0, + 0, + {0}, // IopNumTriagDumpDataBlocks + {0}, // IopTriageDumpDataBlocks +}; diff --git a/reactos/ntoskrnl/ke/bug.c b/reactos/ntoskrnl/ke/bug.c index f4ae4f64978..2c3bceaa701 100644 --- a/reactos/ntoskrnl/ke/bug.c +++ b/reactos/ntoskrnl/ke/bug.c @@ -18,8 +18,8 @@ /* GLOBALS *******************************************************************/ -LIST_ENTRY BugcheckCallbackListHead; -LIST_ENTRY BugcheckReasonCallbackListHead; +LIST_ENTRY KeBugcheckCallbackListHead; +LIST_ENTRY KeBugcheckReasonCallbackListHead; KSPIN_LOCK BugCheckCallbackLock; ULONG KeBugCheckActive, KeBugCheckOwner; LONG KeBugCheckOwnerRecursionCount; @@ -209,7 +209,7 @@ KiDoBugCheckCallbacks(VOID) ULONG_PTR Checksum; /* First make sure that the list is Initialized... it might not be */ - ListHead = &BugcheckCallbackListHead; + ListHead = &KeBugcheckCallbackListHead; if ((ListHead->Flink) && (ListHead->Blink)) { /* Loop the list */ @@ -1033,7 +1033,7 @@ KeRegisterBugCheckCallback(IN PKBUGCHECK_CALLBACK_RECORD CallbackRecord, CallbackRecord->Component = Component; CallbackRecord->CallbackRoutine = CallbackRoutine; CallbackRecord->State = BufferInserted; - InsertTailList(&BugcheckCallbackListHead, &CallbackRecord->Entry); + InsertTailList(&KeBugcheckCallbackListHead, &CallbackRecord->Entry); Status = TRUE; } @@ -1067,7 +1067,7 @@ KeRegisterBugCheckReasonCallback( CallbackRecord->CallbackRoutine = CallbackRoutine; CallbackRecord->State = BufferInserted; CallbackRecord->Reason = Reason; - InsertTailList(&BugcheckReasonCallbackListHead, + InsertTailList(&KeBugcheckReasonCallbackListHead, &CallbackRecord->Entry); Status = TRUE; } diff --git a/reactos/ntoskrnl/ke/krnlinit.c b/reactos/ntoskrnl/ke/krnlinit.c index 4a3524069f3..ee8c2fce18e 100644 --- a/reactos/ntoskrnl/ke/krnlinit.c +++ b/reactos/ntoskrnl/ke/krnlinit.c @@ -62,8 +62,8 @@ KiInitSystem(VOID) ULONG i; /* Initialize Bugcheck Callback data */ - InitializeListHead(&BugcheckCallbackListHead); - InitializeListHead(&BugcheckReasonCallbackListHead); + InitializeListHead(&KeBugcheckCallbackListHead); + InitializeListHead(&KeBugcheckReasonCallbackListHead); KeInitializeSpinLock(&BugCheckCallbackLock); /* Initialize the Timer Expiration DPC */ diff --git a/reactos/ntoskrnl/ob/obinit.c b/reactos/ntoskrnl/ob/obinit.c index d3c7042d8e2..89fb834189a 100644 --- a/reactos/ntoskrnl/ob/obinit.c +++ b/reactos/ntoskrnl/ob/obinit.c @@ -198,7 +198,7 @@ ObInit(VOID) ObjectTypeInitializer.GenericMapping = ObpTypeMapping; ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(OBJECT_TYPE); ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK; - ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ObTypeObjectType); + ObCreateObjectType(&Name, &ObjectTypeInitializer, NULL, &ObpTypeObjectType); /* Create the Directory Type */ RtlInitUnicodeString(&Name, L"Directory"); @@ -247,7 +247,7 @@ ObPostPhase0: 0, ObDirectoryType, KernelMode, - (PVOID*)&NameSpaceRoot, + (PVOID*)&ObpRootDirectoryObject, NULL); if (!NT_SUCCESS(Status)) return FALSE; @@ -289,7 +289,7 @@ ObPostPhase0: ObpAcquireDirectoryLockExclusive(ObpTypeDirectoryObject, &Context); /* Loop the object types */ - ListHead = &ObTypeObjectType->TypeList; + ListHead = &ObpTypeObjectType->TypeList; NextEntry = ListHead->Flink; while (ListHead != NextEntry) { diff --git a/reactos/ntoskrnl/ob/oblife.c b/reactos/ntoskrnl/ob/oblife.c index 77cad1d8290..085d8118510 100644 --- a/reactos/ntoskrnl/ob/oblife.c +++ b/reactos/ntoskrnl/ob/oblife.c @@ -19,7 +19,7 @@ extern ULONG NtGlobalFlag; -POBJECT_TYPE ObTypeObjectType = NULL; +POBJECT_TYPE ObpTypeObjectType = NULL; KEVENT ObpDefaultObject; NPAGED_LOOKASIDE_LIST ObpNmLookasideList, ObpCiLookasideList; @@ -1074,7 +1074,7 @@ ObCreateObjectType(IN PUNICODE_STRING TypeName, /* Allocate the Object */ Status = ObpAllocateObject(NULL, &ObjectName, - ObTypeObjectType, + ObpTypeObjectType, sizeof(OBJECT_TYPE), KernelMode, (POBJECT_HEADER*)&Header); @@ -1098,11 +1098,11 @@ ObCreateObjectType(IN PUNICODE_STRING TypeName, LocalObjectType->HighWaterNumberOfHandles = 0; /* Check if this is the first Object Type */ - if (!ObTypeObjectType) + if (!ObpTypeObjectType) { /* It is, so set this as the type object */ - ObTypeObjectType = LocalObjectType; - Header->Type = ObTypeObjectType; + ObpTypeObjectType = LocalObjectType; + Header->Type = ObpTypeObjectType; /* Set the hard-coded key and object count */ LocalObjectType->TotalNumberOfObjects = 1; @@ -1195,11 +1195,11 @@ ObCreateObjectType(IN PUNICODE_STRING TypeName, /* Get creator info and insert it into the type list */ CreatorInfo = OBJECT_HEADER_TO_CREATOR_INFO(Header); - if (CreatorInfo) InsertTailList(&ObTypeObjectType->TypeList, + if (CreatorInfo) InsertTailList(&ObpTypeObjectType->TypeList, &CreatorInfo->TypeList); /* Set the index and the entry into the object type array */ - LocalObjectType->Index = ObTypeObjectType->TotalNumberOfObjects; + LocalObjectType->Index = ObpTypeObjectType->TotalNumberOfObjects; if (LocalObjectType->Index < 32) { /* It fits, insert it */ diff --git a/reactos/ntoskrnl/ob/obname.c b/reactos/ntoskrnl/ob/obname.c index 2ffd720082a..32dec0809c0 100644 --- a/reactos/ntoskrnl/ob/obname.c +++ b/reactos/ntoskrnl/ob/obname.c @@ -16,7 +16,7 @@ #include BOOLEAN ObpCaseInsensitive = TRUE; -POBJECT_DIRECTORY NameSpaceRoot; +POBJECT_DIRECTORY ObpRootDirectoryObject; POBJECT_DIRECTORY ObpTypeDirectoryObject; /* DOS Device Prefix \??\ and \?? */ @@ -407,7 +407,7 @@ ObpLookupObjectName(IN HANDLE RootHandle OPTIONAL, { /* Reparsed to the root directory, so start over */ ObDereferenceObject(RootDirectory); - RootDirectory = NameSpaceRoot; + RootDirectory = ObpRootDirectoryObject; /* Don't use this anymore, since we're starting at root */ RootHandle = NULL; @@ -448,7 +448,7 @@ ObpLookupObjectName(IN HANDLE RootHandle OPTIONAL, else { /* We did not get a Root Directory, so use the root */ - RootDirectory = NameSpaceRoot; + RootDirectory = ObpRootDirectoryObject; /* It must start with a path separator */ if (!(ObjectName->Length) || @@ -811,7 +811,7 @@ ReparseObject: /* Start at Root */ ParentDirectory = NULL; - RootDirectory = NameSpaceRoot; + RootDirectory = ObpRootDirectoryObject; /* Check for reparse status */ if (Status == STATUS_REPARSE_OBJECT) @@ -838,7 +838,7 @@ ReparseObject: goto ParseFromRoot; } } - else if (RootDirectory == NameSpaceRoot) + else if (RootDirectory == ObpRootDirectoryObject) { /* We got STATUS_REPARSE but are at the Root Directory */ Object = NULL; @@ -1025,7 +1025,7 @@ ObQueryNameString(IN PVOID Object, * enough right at the beginning, not work our way through * and find out at the end */ - if (Object == NameSpaceRoot) + if (Object == ObpRootDirectoryObject) { /* Size of the '\' string */ NameSize = sizeof(OBJ_NAME_PATH_SEPARATOR); @@ -1037,7 +1037,7 @@ ObQueryNameString(IN PVOID Object, NameSize = sizeof(OBJ_NAME_PATH_SEPARATOR) + LocalInfo->Name.Length; /* Loop inside the directory to get the top-most one (meaning root) */ - while ((ParentDirectory != NameSpaceRoot) && (ParentDirectory)) + while ((ParentDirectory != ObpRootDirectoryObject) && (ParentDirectory)) { /* Get the Name Information */ LocalInfo = OBJECT_HEADER_TO_NAME_INFO( @@ -1080,7 +1080,7 @@ ObQueryNameString(IN PVOID Object, *--ObjectName = UNICODE_NULL; /* Check if the object is actually the Root directory */ - if (Object == NameSpaceRoot) + if (Object == ObpRootDirectoryObject) { /* This is already the Root Directory, return "\\" */ *--ObjectName = OBJ_NAME_PATH_SEPARATOR; @@ -1101,7 +1101,7 @@ ObQueryNameString(IN PVOID Object, /* Now parse the Parent directories until we reach the top */ ParentDirectory = LocalInfo->Directory; - while ((ParentDirectory != NameSpaceRoot) && (ParentDirectory)) + while ((ParentDirectory != ObpRootDirectoryObject) && (ParentDirectory)) { /* Get the name information */ LocalInfo = OBJECT_HEADER_TO_NAME_INFO(