NtDebugActiveProcess
NTSTATUS __stdcall NtDebugActiveProcess(PVOID ProcessHandle, PVOID DebugObjectHandle){
KPROCESSOR_MODE v3;
NTSTATUS result;
UINT64 v5;
_ETHREAD *CurrentThread;
struct _EX_RUNDOWN_REF *v7;
_QWORD *v8;
NTSTATUS v9;
__int64 v10;
__int16 v11;
unsigned __int64 Count;
__int16 v13;
bool v14;
KEVENT *v15;
unsigned int v16;
struct _EX_RUNDOWN_REF *v17;
PVOID v18;
PVOID Object;
v18 = 0i64;
v3 = *((_BYTE *)KeGetCurrentThread() + 562);
v17 = 0i64;
result = ObReferenceObjectByHandleWithTag(
ProcessHandle,
0x800u,
(POBJECT_TYPE)PsProcessType,
v3,
0x4F676244u,
&v18,
0i64);
if( result >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v7 = (struct _EX_RUNDOWN_REF *)v18;
v8 = (_QWORD *)*((_QWORD *)CurrentThread + 23);
if( v18 == v8 || v18 == PsInitialSystemProcess )
{
v9 = -1073741790;
}
else
{
LOBYTE(v5) = v3;
if( PsTestProtectedProcessIncompatibility(v5, *((_QWORD *)CurrentThread + 23), (__int64)v18) )
{
v9 = -1073740014;
}
else if( (v7[124].Count & 1) == 0 || (v9 = PsRequestDebugSecureProcess((INT64)v7, 1u), v9 >= 0) )
{
v10 = v8[176];
if( !v10
|| (v11 = *(_WORD *)(v10 + 8), v11 != 332) && v11 != 452
|| (Count = v7[176].Count) != 0 && ((v13 = *(_WORD *)(Count + 8), v13 == 332) || v13 == 452) )
{
Object = 0i64;
v9 = ObReferenceObjectByHandle(DebugObjectHandle, 2u, DbgkDebugObjectType, v3, &Object, 0i64);
if( v9 >= 0 )
{
v14 = ExAcquireRundownProtection(v7 + 139);
v15 = (KEVENT *)Object;
if( v14 )
{
v16 = DbgkpPostFakeProcessCreateMessages((ULONG_PTR)v7, (struct _KEVENT *)Object, &v17);
v9 = DbgkpSetProcessDebugObject((_EPROCESS *)v7, v15, v16, v17);
ExReleaseRundownProtection(v7 + 139);
}
else
{
v9 = -1073741558;
}
HalPutDmaAdapter((PADAPTER_OBJECT)v15);
}
}
else
{
v9 = -1073741637;
}
}
}
ObfDereferenceObjectWithTag(v7, 0x4F676244ui64);
return v9;
}
return result;
}Referenced by:
No references.