DrvDbGetCompositeMappedPropertyKeys

NTSTATUS __stdcall DrvDbGetCompositeMappedPropertyKeys(
        _DRVDB_CONTEXT *pDrvDbCtx,
        const _DEVPROPKEY **CompositePropertyKeyList,
        UINT64 CompositePropertyKeyCount,
        _DEVPROPKEY *PropertyKeys,
        UINT64 BufferLength,
        UINT64 *PropertyCount){
  NTSTATUS result; 
  __int64 v7; 
  unsigned int v8; 
  const _DEVPROPKEY *v10; 
  __int64 v11; 
  unsigned int v12; 
  int v13; 
  unsigned int v14; 

  result = 0;
  v7 = 0i64;
  v8 = 0;
  if( (_DWORD)CompositePropertyKeyCount )
  {
    while( 1 )
    {
      if( PropertyKeys && (unsigned int)v7 < (unsigned int)BufferLength )
      {
        v10 = *CompositePropertyKeyList;
        v11 = v7;
        v7 = (unsigned int)(v7 + 1);
        PropertyKeys[v11].fmtid = (*CompositePropertyKeyList)->fmtid;
        PropertyKeys[v11].pid = v10->pid;
      }
      v12 = *(_DWORD *)PropertyCount;
      v13 = -1;
      v14 = *(_DWORD *)PropertyCount + 1;
      if( v14 >= *(_DWORD *)PropertyCount )
        v13 = *(_DWORD *)PropertyCount + 1;
      *(_DWORD *)PropertyCount = v13;
      result = v14 < v12 ? 0xC0000095 : 0;
      if( v14 < v12 )
        break;
      ++v8;
      ++CompositePropertyKeyList;
      if( v8 >= (unsigned int)CompositePropertyKeyCount )
        return result;
    }
    *(_DWORD *)PropertyCount = 0;
  }
  return result;
}

Referenced by:

DrvDbGetDeviceIdMappedPropertyKeys
DrvDbGetDriverDatabaseMappedPropertyKeys
DrvDbGetDriverFileMappedPropertyKeys
DrvDbGetDriverInfFileMappedPropertyKeys
DrvDbGetDriverPackageMappedPropertyKeys