PspSetProcessTimerDelayForWin32

NTSTATUS __stdcall PspSetProcessTimerDelayForWin32(_EPROCESS *Process){
  _EX_PUSH_LOCK *p_ProcessLock; 
  unsigned __int64 All; 
  _EPROCESS *Parameters; 
  int v6; 
  int v7; 
  UINT64 SessionId; 

  p_ProcessLock = &Process->ProcessLock;
  ExAcquirePushLockSharedEx(&Process->ProcessLock, 0i64);
  if( Process->Win32Process )
  {
    if( _InterlockedCompareExchange64(&p_ProcessLock->_bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(p_ProcessLock);
    KeAbPostRelease(p_ProcessLock);
    All = Process->ProcessTimerDelay.All;
    LODWORD(SessionId) = MmGetSessionIdEx(Process);
    Parameters = Process;
    v6 = All & 0x3FFFFFFF;
    v7 = (All >> 30) & 0x3FFFFFFF;
    return PsInvokeWin32Callout(
             Win32CoreMessagingObjectOpenCallout|Win32DesktopOpenCallout,
             &Parameters,
             PsWin32SessionAttachSingle,
             &SessionId);
  }
  else
  {
    if( _InterlockedCompareExchange64(&p_ProcessLock->_bf_0, 0i64, 17i64) != 17 )
      ExfReleasePushLockShared(p_ProcessLock);
    KeAbPostRelease(p_ProcessLock);
    return 0;
  }
}

Referenced by:

PspApplyTimerDelayProcess