KeGetNextKernelStackSegment
UINT8 __stdcall KeGetNextKernelStackSegment(
_ETHREAD *Thread,
_KERNEL_STACK_SEGMENT *StackSegment,
UINT8 FirstEnumeration){
unsigned __int64 InitialStack;
if( FirstEnumeration )
{
StackSegment->StackBase = (unsigned __int64)Thread->Tcb.StackBase;
StackSegment->StackLimit = (unsigned __int64)Thread->Tcb.StackLimit;
StackSegment->KernelStack = (unsigned __int64)Thread->Tcb.KernelStack;
StackSegment->InitialStack = (unsigned __int64)Thread->Tcb.InitialStack;
}
else
{
InitialStack = StackSegment->InitialStack;
if( !*(_QWORD *)(InitialStack + 16) )
return 0;
*StackSegment = *(_KERNEL_STACK_SEGMENT *)(InitialStack + 16);
}
return 1;
}Referenced by:
KeEnumerateKernelStackSegments
KiInSwapKernelStacks
RtlpIsFrameInBoundsEx
RtlpWalkFrameChain