PopFreeWakeSource

VOID __stdcall PopFreeWakeSource(PVOID P, PVOID a2){
  int v2; 
  void *v4; 
  void *v5; 
  void *v6; 
  void *v7; 
  v2 = *((_DWORD *)P + 4);
  if( v2 )
  {
    if( (unsigned int)(v2 - 2) <= 1 )
    {
      v4 = (void *)*((_QWORD *)P + 3);
      if( v4 )
        ExFreePoolEx(v4, a2);
    }
  }
  else
  {
    v5 = (void *)*((_QWORD *)P + 4);
    if( v5 )
      ExFreePoolWithTag(v5, 0x206D654Du);
    v6 = (void *)*((_QWORD *)P + 6);
    if( v6 )
      ExFreePoolWithTag(v6, 0x206D654Du);
    v7 = (void *)*((_QWORD *)P + 8);
    if( v7 )
      ExFreePoolWithTag(v7, 0x206D654Du);
  }
  ExFreePoolWithTag(P, 0x206D654Du);
}

Referenced by:

PopProcessWakeSourceWork
PopUnlinkWakeSources
PopUpdateWakeSourceWorker