PiUEventBroadcastEventWorker
VOID __stdcall PiUEventBroadcastEventWorker(VOID *Parameter){
char v2;
__int64 v3;
char v4;
int v5;
UINT64 v6;
const _WNF_STATE_NAME *v7;
__int64 v8;
int v9;
UINT64 v10;
_ADAPTER_OBJECT *SessionById;
const _WNF_STATE_NAME *v12;
int v13;
UINT64 v14;
UINT64 v15;
int ExplicitScope;
v2 = 0;
do
{
ExAcquireFastMutex((PFAST_MUTEX)((char *)&PnpReplaceEvent + 7872));
v3 = *(&PnpReplaceEvent + 992);
v4 = *(_BYTE *)(*(&PnpReplaceEvent + 992) + 16i64);
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&PnpReplaceEvent + 7872));
if( v4 )
{
v5 = *(_DWORD *)(v3 + 20);
if( !v5 )
{
v6 = *(unsigned int *)(v3 + 24);
ExplicitScope = v6;
if( (_DWORD)v6 == -1 )
{
v7 = &WNF_PNPA_DEVNODES_CHANGED;
LABEL_6:
LODWORD(v15) = 0;
LODWORD(v14) = 0;
ZwUpdateWnfStateData(v7, 0i64, 0i64, 0i64, 0i64, v14, v15);
goto LABEL_7;
}
SessionById = (_ADAPTER_OBJECT *)MmGetSessionById(v6);
if( !SessionById )
goto LABEL_7;
v12 = &WNF_PNPA_DEVNODES_CHANGED_SESSION;
goto LABEL_18;
}
v9 = v5 - 1;
if( !v9 )
{
v10 = *(unsigned int *)(v3 + 24);
ExplicitScope = v10;
if( (_DWORD)v10 == -1 )
{
v7 = (const _WNF_STATE_NAME *)&WNF_PNPA_VOLUMES_CHANGED;
goto LABEL_6;
}
SessionById = (_ADAPTER_OBJECT *)MmGetSessionById(v10);
if( !SessionById )
goto LABEL_7;
v12 = (const _WNF_STATE_NAME *)&WNF_PNPA_VOLUMES_CHANGED_SESSION;
LABEL_18:
LODWORD(v15) = 0;
LODWORD(v14) = 0;
ZwUpdateWnfStateData(v12, 0i64, 0i64, 0i64, &ExplicitScope, v14, v15);
HalPutDmaAdapter(SessionById);
goto LABEL_7;
}
v13 = v9 - 1;
if( v13 )
{
if( v13 == 1 )
PiUEventBroadcastPortsChangedEvent(*(unsigned int *)(v3 + 24), (_GUID *)(v3 + 28), (WCHAR *)(v3 + 44));
}
else
{
PiUEventBroadcastHardwareProfilesChangedEvent(*(unsigned int *)(v3 + 24), (_GUID *)(v3 + 28));
}
}
LABEL_7:
ExAcquireFastMutex((PFAST_MUTEX)((char *)&PnpReplaceEvent + 7872));
if( *(_UNKNOWN **)(*(&PnpReplaceEvent + 992) + 8i64) != (_UNKNOWN *)((char *)&PnpReplaceEvent + 7936)
|| (v8 = **(&PnpReplaceEvent + 992), *(_QWORD *)(**(&PnpReplaceEvent + 992) + 8i64) != *(&PnpReplaceEvent + 992)) )
{
__fastfail(3u);
}
*(&PnpReplaceEvent + 992) = **(&PnpReplaceEvent + 992);
*(_QWORD *)(v8 + 8) = (char *)&PnpReplaceEvent + 7936;
if( (_UNKNOWN *)*(&PnpReplaceEvent + 992) == (_UNKNOWN *)((char *)&PnpReplaceEvent + 7936) )
v2 = 1;
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&PnpReplaceEvent + 7872));
ExFreePoolWithTag((PVOID)v3, 0x59706E50u);
}
while( !v2 );
ExFreePoolWithTag(Parameter, 0x59706E50u);
}Referenced by:
No references.