PopFreeSessionState

VOID __stdcall PopFreeSessionState(UINT64 SessionId){
  int v1; 
  unsigned int i; 
  _LIST_ENTRY *v3; 
  _LIST_ENTRY *Flink; 
  int Flink_high; 
  _LIST_ENTRY *v6; 
  _LIST_ENTRY *Blink; 

  v1 = SessionId;
  ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C23628 + 3000));
  for( i = 0; i < 2; ++i )
  {
    v3 = &PopSessionSpecificLists + i;
    Flink = v3->Flink;
    while( Flink != v3 )
    {
      if( LODWORD(Flink[3].Flink) == v1 )
      {
        Flink_high = HIDWORD(Flink[3].Flink);
        v6 = Flink->Flink;
        if( (Flink_high & 2) != 0 )
        {
          HIDWORD(Flink[3].Flink) = Flink_high | 4;
        }
        else
        {
          if( v6->Blink != Flink || (Blink = Flink->Blink, Blink->Flink != Flink) )
            __fastfail(3u);
          Blink->Flink = v6;
          v6->Blink = Blink;
          PopFreeRegistration((_POP_POWER_SETTING_CONFIGURATION *)Flink);
        }
        Flink = v6;
      }
      else
      {
        Flink = Flink->Flink;
      }
    }
  }
  KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
}

Referenced by:

NtPowerInformation