看了下源码,自己回答一下吧
PKPRCB KiInitProcessorState( PKPROCESSOR_STATE pProcessorState, PVOID PerProcessorAllocation, ULONG NewProcessorNumber, UCHAR NodeNumber, ULONG IdtOffset, ULONG GdtOffset, PVOID *ppStack, PVOID *ppDpcStack );
里面,看到这个
KiCloneDescriptor (&Descriptor, &pProcessorState->SpecialRegisters.Idtr, Base + IdtOffset);
继续看下去
static VOID KiCloneDescriptor ( IN PKDESCRIPTOR pSrcDescriptor, IN PKDESCRIPTOR pDestDescriptor, IN PVOID Base )
/*++
Routine Description:
Makes a copy of the specified descriptor, and supplies a return descriptor for the new copy
Arguments:
pSrcDescriptor - descriptor to clone pDescDescriptor - the cloned descriptor Base - Base memory for the new descriptor.
Return Value:
None.
--*/ { ULONG Size;
Size = pSrcDescriptor->Limit + 1; pDestDescriptor->Limit = (USHORT) Size -1; pDestDescriptor->Base = (ULONG) Base;
RtlCopyMemory(Base, (PVOID)pSrcDescriptor->Base, Size); }
也就是说,多核下面的IDTR是多份,但是ISR应该是一样的,连猜带摸,如果不对,跟帖纠正吧~~~
|