PopDispatchNotificationsToList
VOID __stdcall PopDispatchNotificationsToList(_LIST_ENTRY *List){
_WNF_STATE_NAME *Flink;
unsigned int v3;
_WNF_STATE_NAME *v4;
NTSTATUS v5;
UINT64 v6;
NTSTATUS updated;
_WNF_STATE_NAME **v8;
UINT64 MatchingChangeStamp;
UINT64 CheckStamp;
UINT64 ReturnBufferLength;
_WNF_STATE_NAME StateName;
char OutputBuffer[40];
LODWORD(ReturnBufferLength) = 0;
StateName = 0i64;
ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C23628 + 3000));
Flink = (_WNF_STATE_NAME *)List->Flink;
while( Flink != (_WNF_STATE_NAME *)List )
{
v3 = Flink[6].Data[1];
v4 = Flink;
while( (v3 & 1) != 0 && (v3 & 2) == 0 )
{
StateName = Flink[7];
Flink[6].Data[1] = Flink[6].Data[1] & 0xFFFFFFFC | 2;
v5 = PopMarshalSettingValues(
(_POP_POWER_SETTING_CONFIGURATION *)Flink,
OutputBuffer,
0x24ui64,
&ReturnBufferLength);
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
v6 = (unsigned int)ReturnBufferLength;
LODWORD(CheckStamp) = 0;
LODWORD(MatchingChangeStamp) = 0;
if( v5 < 0 )
v6 = 0i64;
LODWORD(ReturnBufferLength) = v6;
updated = ZwUpdateWnfStateData(&StateName, OutputBuffer, v6, 0i64, 0i64, MatchingChangeStamp, CheckStamp);
if( KeGetCurrentThread()->WaitBlock[3].SpareLong )
goto LABEL_19;
ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C23628 + 3000));
v3 = Flink[6].Data[1] & 0xFFFFFFFD;
Flink[6].Data[1] = v3;
if( updated < 0 )
{
v3 |= 1u;
Flink[6].Data[1] = v3;
break;
}
}
Flink = (_WNF_STATE_NAME *)*Flink;
if( (v3 & 2) == 0 && (v3 & 4) != 0 )
{
if( (_WNF_STATE_NAME *)Flink[1] != v4 || (v8 = (_WNF_STATE_NAME **)v4[1], *v8 != v4) )
__fastfail(3u);
*v8 = Flink;
Flink[1] = (_WNF_STATE_NAME)v8;
PopFreeRegistration((_POP_POWER_SETTING_CONFIGURATION *)v4);
}
}
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C23628 + 3000));
if( KeGetCurrentThread()->WaitBlock[3].SpareLong )
LABEL_19:
__fastfail(0x20u);
}Referenced by:
PopDispatchNotifications