MmDeleteProcessAddressSpace
VOID __stdcall MmDeleteProcessAddressSpace(_EPROCESS *Process){
char *v1;
ULONG_PTR v3;
char *v4;
INT64 *SharedVm;
__int64 v6;
__int64 v7;
INT64 v8;
_MI_PARTITION *v9;
INT64 v10;
__int64 v11;
_QWORD *v12;
UINT64 *v13;
void *v14;
unsigned __int64 v15;
void *v16;
_QWORD *v17;
ULONG_PTR v18;
_QWORD *i;
char *j;
_QWORD *v21;
void *v22;
v1 = (char *)Process + 1664;
MiUnlinkWorkingSet((_MMSUPPORT_INSTANCE *)((char *)Process + 1664), 0i64);
v3 = *((_QWORD *)Process + 160);
v4 = (char *)*((_QWORD *)Process + 193);
if( v3 )
{
if( v4 && *((_QWORD *)v4 + 2) && *((_DWORD *)v4 + 8) == 1 )
{
v17 = *(_QWORD **)v4;
v18 = 0i64;
while( v17 )
{
v18 = (ULONG_PTR)v17;
v17 = (_QWORD *)*v17;
}
if( !v18 )
{
for( i = (_QWORD *)*((_QWORD *)v4 + 1); i; i = (_QWORD *)*i )
v18 = (ULONG_PTR)i;
}
KeBugCheckEx(0xCBu, v18, 0i64, *(_QWORD *)(v18 + 24), *((_QWORD *)Process + 160));
}
KeBugCheckEx(0x76u, 0i64, (ULONG_PTR)Process, v3, *((_QWORD *)Process + 193));
}
if( v4 )
{
for( j = (char *)*((_QWORD *)Process + 193); ; j = v4 + 8 )
{
while( 1 )
{
v21 = *(_QWORD **)j;
if( !*(_QWORD *)j )
break;
do
{
v22 = v21;
v21 = (_QWORD *)*v21;
}
while( v21 );
if( !v22 )
break;
ExFreePoolWithTag(v22, 0);
}
if( j != v4 )
break;
}
ExFreePoolWithTag(v4, 0);
}
SharedVm = MiGetSharedVm((INT64)v1);
v6 = MiDeleteFinalPageTables((ULONG_PTR)Process);
PsReturnProcessQuota((ULONG_PTR)Process, v7, 4ui64);
MiGetProcessPartition(Process);
v9 = (_MI_PARTITION *)v8;
MiReturnResident(v8, 4ui64);
v11 = *((_QWORD *)Process + 210);
if( v11 )
{
v12 = *(_QWORD **)(v11 + 392);
if( v12 )
MiDeleteAweInfo((ULONG_PTR)Process, v12, v10);
ExCleanupAutoExpandPushLock(v11 + 408, (INT64)v12, v10);
}
v13 = (UINT64 *)SharedVm[5];
if( v13 )
{
MiEmptyPageAccessLog(v13);
SharedVm[5] = 0i64;
}
v14 = (void *)SharedVm[4];
if( v14 )
{
ExFreePoolWithTag(v14, 0);
SharedVm[4] = 0i64;
}
if( (*((_DWORD *)Process + 280) & 0x10) != 0 )
PspChangeJobMemoryUsageByProcess(2, -4i64, (__int64)Process, 0i64);
MiReturnCommit(v9, 4 - v6);
MiDeletePxeSharedLocks((INT64)v1);
MiDeleteWorkingSetList((INT64)v1);
v15 = *((_QWORD *)Process + 171);
if( v15 )
MiReleaseProcessReferenceToSessionDataPage(v15);
v16 = (void *)*((_QWORD *)Process + 319);
if( v16 )
ExFreePoolWithTag(v16, 0);
MiContractPagingFiles(v9);
}Referenced by:
No references.