Share via


IDkmSteppingManagerCallback Interface

Definition

Allows runtime monitors to obtain information from the stepping manager.

Implementations of this interface may restrict when they are called using a filter defined in their component configuration. The following properties may be used: BaseDebugMonitorId, EngineId, RuntimeId, SourceId.

public interface class IDkmSteppingManagerCallback
public interface class IDkmSteppingManagerCallback
__interface IDkmSteppingManagerCallback
public interface IDkmSteppingManagerCallback
type IDkmSteppingManagerCallback = interface
Public Interface IDkmSteppingManagerCallback

Methods

GetControllingRuntimeInstance(DkmStepper)

Returns the runtime instance currently in-control of this DkmStepper.

OnCrossThreadStepArbitration(DkmStepper, DkmStepArbitrationReason, DkmRuntimeInstance, DkmThread, DkmInstructionAddress, DkmStepper)

Called by a runtime monitor when a step is continuing on a different thread. The stepping manager will create a new DkmStepper to be used on the new thread and initiate stepping arbitration to determine which runtime should complete the step just as OnStepArbitration does. The new stepper uses the same step kind and step unit as the original stepper. A new starting instruction address must be given and is set as the stepper's starting address. The original stepper remains alive and when the new stepper completes the stepping manager will suppress the event and notify the original stepper of the completion.

OnStepArbitration(DkmStepper, DkmStepArbitrationReason, DkmRuntimeInstance)

Called by a runtime monitor when a step has left the confines of what the runtime monitor understands or a potential transition into another runtime has been encountered during a step. The stepping manager will initiate stepping arbitration to give each runtime monitor a chance to inspect the process and determine which runtime should complete the step. The runtimes are called in priority order. After this process is complete, the stepping manager will call AfterSteppingArbitration on the monitor that requested arbitration so it can respond to the new controlling monitor if one was found, or finish the step if one was not found.

StepControlRequested(DkmStepper, DkmStepArbitrationReason, DkmRuntimeInstance)

StepControlRequested is called when a non-controlling runtime instance detects that the thread has hit a transition into its runtime. The stepping manager will forward the call to the current controlling runtime instance. If the current controlling runtime instance can stop stepping, it should set Granted to true. Actual control is not given until the requesting runtime calls DkmStepper.TakeStepControl. This two part process allows callers to request control of multiple steppers at the same time.

TakeStepControl(DkmStepper, Boolean, DkmStepArbitrationReason, DkmRuntimeInstance)

TakeStepControl is called when a non-controlling runtime instance detects that the thread has hit a transition into its runtime. The stepping manager will forward the call to the current controlling runtime instance. The runtime instance requesting control should first call StepControlRequested on all steppers it wants control of. If they all set Granted to true, the runtime instance should then call this method on each stepper it is taking control of.

Applies to