PopUnregisterPowerSettingCallback

VOID __stdcall PopUnregisterPowerSettingCallback(_POP_POWER_SETTING_REGISTRATION *Registration){
  __int64 v1; 
  _POP_POWER_SETTING_REGISTRATION **v2; 
  _POP_POWER_SETTING_REGISTRATION **v3; 

  v1 = *(_QWORD *)Registration;
  if( !*((_BYTE *)Registration + 33) )
  {
    if( *(_POP_POWER_SETTING_REGISTRATION **)(v1 + 8) == Registration )
    {
      v2 = (_POP_POWER_SETTING_REGISTRATION **)*((_QWORD *)Registration + 1);
      if( *v2 == Registration )
      {
        *v2 = (_POP_POWER_SETTING_REGISTRATION *)v1;
        *(_QWORD *)(v1 + 8) = v2;
        Registration[4] = 0;
        *((_QWORD *)Registration + 1) = Registration;
        *(_QWORD *)Registration = Registration;
        ExFreePoolWithTag(Registration, 0x74655350u);
        return;
      }
    }
LABEL_5:
    __fastfail(3u);
  }
  if( *(_POP_POWER_SETTING_REGISTRATION **)(v1 + 8) != Registration )
    goto LABEL_5;
  v3 = (_POP_POWER_SETTING_REGISTRATION **)*((_QWORD *)Registration + 1);
  if( *v3 != Registration )
    goto LABEL_5;
  *v3 = (_POP_POWER_SETTING_REGISTRATION *)v1;
  *(_QWORD *)(v1 + 8) = v3;
  *((_QWORD *)Registration + 1) = Registration;
  *(_QWORD *)Registration = Registration;
  KeSetEvent((PRKEVENT)((char *)&stru_140C23628 + 3096), 0, 0);
}

Referenced by:

PoUnregisterPowerSettingCallback
PopDispatchPowerSettingCallbacks