PspSetProcessDefaultHardErrorMode

_QWORD *__fastcall PspSetProcessDefaultHardErrorMode(__int64 a1, __int64 a2, unsigned int a3){
  volatile INT64 *v6; 
  int v7; 
  --*(_WORD *)(a2 + 484);
  v6 = (volatile INT64 *)(a1 + 1080);
  ExAcquirePushLockExclusiveEx(a1 + 1080, 0i64);
  if( *(_DWORD *)(a1 + 1528) != a3 )
  {
    *(_DWORD *)(a1 + 1528) = a3;
    v7 = (a3 >> 2) & 1;
    if( *(_QWORD *)(a1 + 1408) )
      v7 = 1;
    KeSetAutoAlignmentProcess(a1, v7);
  }
  if( (_InterlockedExchangeAdd64(v6, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v6);
  KeAbPostRelease((PVOID)v6);
  return KeLeaveCriticalRegionThread(a2);
}

Referenced by:

NtSetInformationProcess