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