ULONG RtlpVirtualUnwind( IN ULONG ControlPc, IN PRUNTIME_FUNCTION FunctionEntry, IN PCONTEXT ContextRecord, OUT PBOOLEAN InFunction, OUT PULONG EstablisherFrame, IN OUT PKNONVOLATILE_CONTEXT_POINTERS ContextPointers OPTIONAL, IN ULONG LowStackLimit, IN ULONG HighStackLimit ); Routine Description: This function virtually unwinds the specfified function by executing its prologue code backwards. If the function is a leaf function, then the address where control left the previous frame is obtained from the context record. If the function is a nested function, but not an exception or interrupt frame, then the prologue code is executed backwards and the address where control left the previous frame is obtained from the updated context record. If the function is register save millicode, it is treated as a leaf function. If the function is register restore millicode, the remaining body is executed forwards and the address where control left the previous frame is obtained from the final blr instruction. If the function was called via glue code and is not that glue code, the prologe of the glue code is executed backwards in addition to the above actions. Otherwise, an exception or interrupt entry to the system is being unwound and a specially coded prologue restores the return address twice. Once from the fault instruction address and once from the saved return address register. The first restore is returned as the function value and the second restore is place in the updated context record. If a context pointers record is specified, then the address where each nonvolatile registers is restored from is recorded in the appropriate element of the context pointers record. N.B. This function copies the specified context record and only computes the establisher frame and whether control is actually in a function. Arguments: ControlPc - Supplies the address where control left the specified function. FunctionEntry - Supplies the address of the function table entry for the specified function or NULL if the function is a leaf function. ContextRecord - Supplies the address of a context record. InFunction - Supplies a pointer to a variable that receives whether the control PC is within the current function. EstablisherFrame - Supplies a pointer to a variable that receives the the establisher frame pointer value. ContextPointers - Supplies an optional pointer to a context pointers record. LowStackLimit, HighStackLimit - Range of valid values for the stack pointer. This indicates whether it is valid to examine NextPc. Return Value: The address where control left the previous frame is returned as the function value.