PnpDisableWatchdog

VOID *__fastcall PnpDisableWatchdog(__int64 a1){
  __int64 v1; 
  int v3; 

  v1 = *(_QWORD *)(a1 + 8);
  ExDeleteTimer(*(_QWORD *)(v1 + 56), 1, 1, 0i64);
  *(_QWORD *)(v1 + 56) = 0i64;
  if( *(int *)(v1 + 96) > 0 )
    KeWaitForSingleObject(v1 + 104, 0, 0, 0, 0i64);
  ExFreePoolWithTag((PVOID)v1, 0x54645750u);
  v3 = *(_DWORD *)(a1 + 16);
  *(_QWORD *)(a1 + 8) = 0i64;
  PnpRecordBlackbox(0i64, v3);
  if( *(_BYTE *)(a1 + 32) )
    PnpWatchdogEtwWrite(a1, 0);
  return PnpFreeWatchdog((void *)a1);
}

Referenced by:

PnpCallAddDevice
PnpDelayedRemoveWorker
PnpDeviceCompletionRequestDestroyWorkItem
PnpDeviceEventWorker
PnpProcessCompletedEject