DbgkUserReportWorkRoutine
NTSTATUS __stdcall DbgkUserReportWorkRoutine(PVOID P){
_ETHREAD *v2;
PEPROCESS v3;
NTSTATUS v4;
char *v5;
NTSTATUS result;
_OBJECT_TYPE *ObjectType;
_KPROCESSOR_MODE AccessMode;
UINT64 AccessModea;
VOID **Handle;
VOID *BaseAddress;
VOID *ThreadHandle;
VOID *v13;
UINT64 RegionSize[3];
_OBJECT_ATTRIBUTES ObjectAttributes;
_KAPC_STATE ApcState;
RegionSize[2] = (UINT64)P;
v13 = 0i64;
ThreadHandle = 0i64;
BaseAddress = 0i64;
RegionSize[0] = 168i64;
memset(&ApcState, 0, sizeof(ApcState));
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
v2 = *(_ETHREAD **)P;
RegionSize[1] = (UINT64)v2;
v3 = IoThreadToProcess(v2);
KiStackAttachProcess(v3, 0i64, &ApcState);
LOBYTE(AccessMode) = 1;
v4 = ObOpenObjectByPointer(v2, 0i64, 0i64, 114, (POBJECT_TYPE)PsThreadType, AccessMode, &v13);
if( v4 >= 0 )
{
LODWORD(AccessModea) = 4;
LODWORD(ObjectType) = 12288;
v4 = ZwAllocateVirtualMemory(
(VOID *)0xFFFFFFFFFFFFFFFFi64,
&BaseAddress,
0i64,
RegionSize,
(UINT64)ObjectType,
AccessModea);
if( v4 >= 0 )
{
*((_QWORD *)BaseAddress + 1) = *((_QWORD *)P + 1);
*(_QWORD *)BaseAddress = v13;
if( *((_BYTE *)P + 16) )
{
v5 = (char *)BaseAddress + 16;
*((_OWORD *)BaseAddress + 1) = *(_OWORD *)((char *)P + 24);
*((_OWORD *)v5 + 1) = *(_OWORD *)((char *)P + 40);
*((_OWORD *)v5 + 2) = *(_OWORD *)((char *)P + 56);
*((_OWORD *)v5 + 3) = *(_OWORD *)((char *)P + 72);
*((_OWORD *)v5 + 4) = *(_OWORD *)((char *)P + 88);
*((_OWORD *)v5 + 5) = *(_OWORD *)((char *)P + 104);
*((_OWORD *)v5 + 6) = *(_OWORD *)((char *)P + 120);
*((_OWORD *)v5 + 7) = *(_OWORD *)((char *)P + 136);
*((_OWORD *)v5 + 8) = *(_OWORD *)((char *)P + 152);
*((_QWORD *)v5 + 18) = *((_QWORD *)P + 21);
}
ObjectAttributes.Length = 48;
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.Attributes = 512;
ObjectAttributes.ObjectName = 0i64;
*(_OWORD *)&ObjectAttributes.SecurityDescriptor = 0i64;
LODWORD(Handle) = 39;
v4 = ZwCreateThreadEx(
&ThreadHandle,
0x1FFFFFui64,
&ObjectAttributes,
(VOID *)0xFFFFFFFFFFFFFFFFi64,
(VOID *)DbgkWerReportExceptionWorker,
BaseAddress,
(UINT64)Handle,
0i64,
0i64,
0i64,
0i64);
}
else
{
BaseAddress = 0i64;
}
}
if( v4 < 0 )
{
_InterlockedAnd((volatile signed __int32 *)&v2->1296, 0xFFDFFFFF);
if( v13 )
ObCloseHandle(v13, 1);
PsResumeThread(v2, 0i64);
if( BaseAddress )
ZwFreeVirtualMemory((VOID *)0xFFFFFFFFFFFFFFFFi64, &BaseAddress, 0i64, 0x8000ui64);
}
else
{
ZwSetInformationThread((UINT64)ThreadHandle, 46i64, (UINT64)&qword_140033510, 4ui64);
ZwResumeThread(ThreadHandle, 0i64);
ZwClose((_HANDLE)ThreadHandle);
ThreadHandle = 0i64;
}
KiUnstackDetachProcess(&ApcState, 0i64);
ExFreePoolWithTag(P, 0x4B474244u);
HalPutDmaAdapter((PADAPTER_OBJECT)v2);
return result;
}Referenced by:
No references.