PiDmObjectGetCachedCmProperty

NTSTATUS __stdcall PiDmObjectGetCachedCmProperty(
        _CM_OBJECT_TYPE CmObjectType,
        WCHAR *CmObjectName,
        PI_DM_OBJECT *CmRegProp,
        _CM_REG_PROP CmRegPropType,
        UINT8 *PropertyBuffer,
        UINT8 *PropertySize,
        UINT64 *PropertySizea){
  unsigned __int64 v7; 
  int CachedObjectProperty; 
  PNP_OBJECT_TYPE v10; 
  WCHAR *v11; 
  WCHAR *v12; 
  UINT64 v13; 
  __int128 v14; 
  __int128 v15; 
  int v16; 
  __int128 v17; 
  __int128 v18; 
  UINT64 *v19; 
  char v20[4]; 
  _GUID Guid; 
  WCHAR GuidString[8]; 
  __int128 v23; 
  __int128 v24; 
  __int128 v25; 
  __int64 v26; 
  int v27; 
  __int16 v28; 

  v7 = (unsigned __int64)PropertySize;
  CachedObjectProperty = -1073741802;
  Guid = 0i64;
  if( PropertySize )
    v7 = -(__int64)(*(_DWORD *)PropertySizea != 0) & (unsigned __int64)PropertySize;
  else
    *(_DWORD *)PropertySizea = 0;
  if( CmRegPropType == CM_REG_PROP_CLASSGUID && CmObjectType == CM_OBJECT_TYPE_DEVICE )
  {
    v10 = CmMapCmObjectTypeToPnpObjectType(CM_OBJECT_TYPE_DEVICE);
    LODWORD(v19) = 16;
    CachedObjectProperty = PiDmObjectGetCachedObjectProperty(
                             v10,
                             v12,
                             v11,
                             0i64,
                             (UINT64 *)&DEVPKEY_Device_ClassGuid.fmtid.Data1,
                             (UINT8 *)v20,
                             (UINT64)&Guid,
                             v19);
    if( CachedObjectProperty >= 0 )
    {
      *(_DWORD *)PropertyBuffer = 1;
      if( *(_DWORD *)PropertySizea < 0x4Eu )
      {
        *(_DWORD *)PropertySizea = 78;
        return -1073741789;
      }
      else
      {
        CachedObjectProperty = PnpStringFromGuid(&Guid, GuidString, v13);
        if( CachedObjectProperty >= 0 )
        {
          v14 = *(_OWORD *)GuidString;
          v15 = v23;
          v16 = v27;
          *(_DWORD *)PropertySizea = 78;
          *(_OWORD *)v7 = v14;
          v17 = v24;
          *(_OWORD *)(v7 + 16) = v15;
          v18 = v25;
          *(_OWORD *)(v7 + 32) = v17;
          *(_QWORD *)&v17 = v26;
          *(_OWORD *)(v7 + 48) = v18;
          *(_QWORD *)(v7 + 64) = v17;
          *(_DWORD *)(v7 + 72) = v16;
          *(_WORD *)(v7 + 76) = v28;
        }
      }
    }
  }
  return CachedObjectProperty;
}

Referenced by:

PiPnpRtlCmActionCallback