PiUEventNotifyDeviceInterfaceChange

INT64 __fastcall PiUEventNotifyDeviceInterfaceChange(INT64 a1){
  unsigned int v1; 
  __int64 v2; 
  __int64 *v4; 
  unsigned int v5; 
  _QWORD **v6; 
  _QWORD *v7; 
  INT64 v8; 
  __int64 v9; 
  __int64 v11; 
  __int64 v12[7]; 
  v1 = 0;
  v2 = *(_QWORD *)(a1 + 72) - *(_QWORD *)&GUID_DEVICE_INTERFACE_ARRIVAL.Data1;
  if( !v2 )
    v2 = *(_QWORD *)(a1 + 80) - *(_QWORD *)GUID_DEVICE_INTERFACE_ARRIVAL.Data4;
  if( !v2 )
    goto LABEL_4;
  v11 = *(_QWORD *)(a1 + 72) - *(_QWORD *)&GUID_DEVICE_INTERFACE_REMOVAL.Data1;
  if( !v11 )
    v11 = *(_QWORD *)(a1 + 80) - *(_QWORD *)GUID_DEVICE_INTERFACE_REMOVAL.Data4;
  if( !v11 )
  {
LABEL_4:
    ExAcquireFastMutex(&PiUEventClientRegistrationListLock);
    v4 = v12;
    v12[1] = (__int64)qword_140C44CF0;
    v5 = 0;
    v12[0] = (__int64)&PiUEventDevInterfaceClientList[2 * (unsigned int)PiUEventHashGuidIntoBucket((_GUID *)(a1 + 120))];
    do
    {
      v6 = (_QWORD **)*v4;
      v7 = *(_QWORD **)*v4;
      while( v7 != v6 )
      {
        v8 = (INT64)v7;
        v7 = (_QWORD *)*v7;
        if( !v5 )
        {
          v9 = *(_QWORD *)(a1 + 120) - *(_QWORD *)(v8 + 24);
          if( !v9 )
            v9 = *(_QWORD *)(a1 + 128) - *(_QWORD *)(v8 + 32);
          if( v9 )
            continue;
        }
        if( PiUEventApplyAdditionalFilters(a1, v8) )
          v1 = PiUEventNotifyClient(a1, v8);
      }
      ++v5;
      ++v4;
    }
    while( v5 < 2 );
    KeReleaseGuardedMutex(&PiUEventClientRegistrationListLock);
  }
  return v1;
}

Referenced by:

No references.