PiDmListUpdateAggregationCountWorker

VOID __stdcall PiDmListUpdateAggregationCountWorker(
        _PI_DM_OBJECT *ConstraintObject,
        _PI_DM_OBJECT *EntryObject,
        INT64 SignValue){
  char *v3; 
  int v4; 
  __int64 v7; 
  _PNP_OBJECT_TYPE v8; 
  __int64 v9; 
  INT64 v10; 
  unsigned int v11; 
  unsigned int v12; 
  _PI_DM_OBJECT *v13; 
  NTSTATUS v14; 
  UINT64 CachedKeysCount; 
  UINT64 PropertySize; 
  _PI_DM_CACHED_PROPERTY_KEY *CachedKeys; 
  UINT8 PropertyBuffer; 

  CachedKeys = 0i64;
  v3 = byte_140001538;
  CachedKeysCount = 0i64;
  v4 = SignValue;
  LODWORD(PropertySize) = 0;
  PropertyBuffer = 0;
  v7 = 3i64;
  do
  {
    v8 = *((_DWORD *)v3 - 6);
    if( EntryObject[7] == v8 && ConstraintObject[7] == *(_DWORD *)v3 )
    {
      v9 = *((_QWORD *)v3 + 3);
      if( *(_PI_DM_OBJECT *)((char *)ConstraintObject + v9) != 0x80000000 )
      {
        PiDmGetCacheKeys(v8, (const _PI_DM_CACHED_PROPERTY_KEY **)&CachedKeys, &CachedKeysCount);
        PiDmGetCachedKeyIndex(CachedKeys, CachedKeysCount, *((const _DEVPROPKEY **)v3 - 2), v10);
        if( v11 < v12 )
        {
          v13 = &EntryObject[4 * v11 + 28 + 2 * v11];
          if( (unsigned int)*v13 <= 1 )
            goto LABEL_15;
          v14 = PiDmCacheDataDecode(
                  v13,
                  (UINT64 *)((char *)&CachedKeysCount + 4),
                  &PropertyBuffer,
                  1ui64,
                  &PropertySize);
          if( v14 < 0 )
          {
            if( v14 != -1073741275 && v14 != -1073741789 )
LABEL_15:
              *(_PI_DM_OBJECT *)((char *)ConstraintObject + v9) = 0x80000000;
          }
          else if( PropertyBuffer == 0xFF && HIDWORD(CachedKeysCount) == 17 )
          {
            *(_PI_DM_OBJECT *)((char *)ConstraintObject + v9) += v4;
          }
        }
      }
    }
    v3 += 56;
    --v7;
  }
  while( v7 );
}

Referenced by:

No references.