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.