PspSetupUserFiberShadowStack

__int64 __fastcall PspSetupUserFiberShadowStack(UINT64 a1, UINT64 a2, unsigned int a3, _QWORD *a4){
  int v4; 
  INT64 v5; 
  void *v6; 
  INT64 v8; 
  UINT64 v9; 
  INT64 v10[3]; 

  v10[0] = 0i64;
  v9 = 0i64;
  v4 = PspReserveAndCommitUserShadowStack(a1, a2, a3, (INT64 *)&v9, v10);
  if( v4 >= 0 )
  {
    v5 = v10[0] - 8;
    __wrussq((void *)(v10[0] - 8), PspUserFiberStart);
    v6 = (void *)(v10[0] - 16);
    *a4 = v10[0] - 16;
    __wrussq(v6, v5 & 0xFFFFFFFFFFFFFFFCui64 | 1);
    v9 = 0i64;
  }
  if( v9 )
  {
    v10[0] = 0i64;
    LODWORD(v8) = 0x40000000;
    MmFreeVirtualMemory(-1i64, &v9, v10, 0x8000i64, 0, v8);
    *a4 = 0i64;
  }
  return(unsigned int)v4;
}

Referenced by:

NtSetInformationProcess