NtSetContextThread
NTSTATUS __stdcall NtSetContextThread(PVOID ThreadHandle, _CONTEXT *ThreadContext){
_ETHREAD *CurrentThread;
KPROCESSOR_MODE v4;
int v5;
_ETHREAD *v6;
__int64 v7;
__int64 v8;
__int64 v9;
int v11;
_ETHREAD *Thread;
EVENT_DATA_DESCRIPTOR UserData;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
Thread = 0i64;
v4 = *((_BYTE *)CurrentThread + 562);
v5 = ObReferenceObjectByHandle(ThreadHandle, 0x10u, (POBJECT_TYPE)PsThreadType, v4, (PVOID *)&Thread, 0i64);
if( v5 >= 0 )
{
IoThreadToProcess(CurrentThread);
v6 = Thread;
v8 = v7;
if( (*(_DWORD *)(v7 + 1120) & 0x20000) != 0 && (IoThreadToProcess(Thread), v8 == v9) )
{
v5 = -1073740278;
}
else if( (*((_DWORD *)v6 + 29) & 0x400) != 0 || *((_QWORD *)v6 + 188) )
{
v5 = -1073741816;
}
else
{
v5 = PspSetContextThreadInternal(v6, (__int64)ThreadContext, v4, v4, 1);
}
HalPutDmaAdapter((PADAPTER_OBJECT)v6);
}
UserData.Reserved = 0;
UserData.Ptr = (unsigned __int64)&v11;
v11 = v5;
UserData.Size = 4;
EtwWrite(EtwApiCallsProvRegHandle, (EVENT_DESCRIPTOR *)&KERNEL_AUDIT_API_SETCONTEXTTHREAD, 0i64, 1ui64, &UserData);
return v5;
}Referenced by:
No references.