PnpWatchdogTimerAllocate

UINT8 *__fastcall PnpWatchdogTimerAllocate(__int64 a1){
  __int64 v1; 
  unsigned int v3; 
  unsigned int v4; 
  UINT8 *Timer; 
  __int128 v6; 
  __int64 v7; 

  v1 = 0i64;
  if( !a1
    || (v3 = *(_DWORD *)(a1 + 24)) == 0
    || !*(_QWORD *)(a1 + 8) && !*(_QWORD *)(a1 + 16)
    || (v4 = *(_DWORD *)(a1 + 28)) != 0 && (!*(_QWORD *)(a1 + 32) || v4 <= v3) )
  {
    __fastfail(5u);
  }
  Timer = WdtpAllocateTimer();
  if( Timer )
  {
    v6 = *(_OWORD *)(a1 + 16);
    *(_OWORD *)(Timer + 8) = *(_OWORD *)a1;
    v7 = *(_QWORD *)(a1 + 32);
    *(_OWORD *)(Timer + 24) = v6;
    *((_QWORD *)Timer + 5) = v7;
    if( *(_QWORD *)(a1 + 16) )
    {
      *((_QWORD *)Timer + 11) = Timer;
      *((_QWORD *)Timer + 10) = WdtpBarkWorkerThread;
      *((_QWORD *)Timer + 8) = 0i64;
    }
    return Timer;
  }
  return(UINT8 *)v1;
}

Referenced by:

PnpAllocateWatchdog