KdpSetContextEx
VOID __stdcall KdpSetContextEx(_DBGKD_MANIPULATE_STATE64 *m, _STRING *AdditionalData, _CONTEXT *Context){
__int64 Processor;
unsigned __int64 TransferCount;
__int64 Unused;
__int64 TraceFlag;
__int64 v9;
__int64 v10;
__int64 v11;
_QWORD v12[5];
UINT64 ContextFlags;
LODWORD(ContextFlags) = 0;
v12[0] = 56i64;
v12[1] = m;
Processor = m->Processor;
if( (unsigned __int16)Processor < 0x500u && *(&KiProcessorBlock + Processor) && *(&KiSwapEvent + 480) )
{
TransferCount = m->u.ReadMemory.TransferCount;
if( (unsigned int)TransferCount <= 0x1000
&& (Unused = m->u.GetContext.Unused, (unsigned int)Unused < (unsigned int)TransferCount)
&& (TraceFlag = m->u.Continue2.ControlSet.TraceFlag, (_DWORD)TraceFlag)
&& Unused + TraceFlag <= TransferCount )
{
KdpQuickMoveMemory(
(INT8 *)&stru_140CF6298 + (unsigned int)Unused,
AdditionalData->Buffer,
(unsigned int)TraceFlag);
if( v10 == v9 )
{
v11 = m->Processor;
if( (_WORD)v11 != (unsigned __int16)KeGetPcr()->Prcb.Number )
Context = (*(&KiProcessorBlock + v11))->Context;
KdpSanitizeContextFlags(&stru_140CF6298, (unsigned int)v9, &ContextFlags);
KdpCopyContext(Context, (unsigned int)ContextFlags, &stru_140CF6298);
}
m->ReturnStatus = 0;
m->u.ReadMemory.TransferCount = TraceFlag;
}
else
{
m->ReturnStatus = -1073741811;
}
}
else
{
m->ReturnStatus = -1073741823;
}
KdSendPacket(2i64, v12, 0i64, &KdpContext);
}Referenced by:
KdpSendWaitContinue