PspDeleteUserStack
VOID __stdcall PspDeleteUserStack(
_EPROCESS *Process,
_PS_INITIAL_TEB *InitialTeb,
_PSP_STACK_ALLOCATION_STATE *AllocationState){
char *v3;
char *v5;
char v6;
VOID *v7;
UINT64 v8;
UINT64 v9;
INT64 v10;
UINT64 RegionSize;
VOID *BaseAddress;
_KAPC_STATE ApcState;
memset(&ApcState, 0, sizeof(ApcState));
v5 = v3;
KiStackAttachProcess(Process, 0i64, &ApcState);
v6 = *v5;
if( (*v5 & 2) != 0 )
{
v7 = *(VOID **)&AllocationState[2].StackAllocationFlags;
RegionSize = 0i64;
BaseAddress = v7;
ZwFreeVirtualMemory((VOID *)0xFFFFFFFFFFFFFFFFi64, &BaseAddress, &RegionSize, 0x8000ui64);
v6 = *v5;
}
if( (v6 & 4) != 0 )
{
v8 = *(_QWORD *)&AllocationState[3].StackSize;
BaseAddress = 0i64;
RegionSize = v8;
ZwFreeVirtualMemory((VOID *)0xFFFFFFFFFFFFFFFFi64, (VOID **)&RegionSize, (UINT64 *)&BaseAddress, 0x8000ui64);
v6 = *v5;
}
if( (v6 & 8) != 0 )
{
v9 = *(_QWORD *)&AllocationState[4].StackAllocationFlags;
BaseAddress = 0i64;
LODWORD(v10) = 0x40000000;
RegionSize = v9;
MmFreeVirtualMemory(-1i64, &RegionSize, (INT64 *)&BaseAddress, 0x8000i64, 0, v10);
}
KiUnstackDetachProcess(&ApcState, 0i64);
}Referenced by:
PspAllocateThread
PspInsertThread