PiDmObjectGetCachedObjectProperty

NTSTATUS __stdcall PiDmObjectGetCachedObjectProperty(
        PNP_OBJECT_TYPE ObjectType,
        WCHAR *ObjectName,
        WCHAR *PropertyLocaleName,
        _DEVPROPKEY *PropertyKey,
        UINT64 *PropertyType,
        UINT8 *PropertyBuffer,
        UINT64 BufferSize,
        UINT64 *PropertySize){
  _GUID *v10; 
  int CachedObjectPropertyData; 
  int v12; 
  _DEVPROPKEY *v13; 
  UINT64 v15; 
  _DEVPROPKEY *v16; 
  _PI_DM_OBJECT *v17; 
  UINT64 BufferSizea; 
  _PI_DM_OBJECT *Object; 
  _PI_DM_OBJECT *ReferencedObject; 
  UINT64 *v21; 

  Object = 0i64;
  ReferencedObject = 0i64;
  v10 = (_GUID *)BufferSize;
  CachedObjectPropertyData = -1073741802;
  if( BufferSize )
  {
    v12 = (int)PropertySize;
    v10 = (_GUID *)(-(__int64)((_DWORD)PropertySize != 0) & BufferSize);
  }
  else
  {
    v12 = 0;
  }
  if( ObjectType < 7 && !PropertyKey )
  {
    CachedObjectPropertyData = PiDmGetObject(ObjectType, ObjectName, &Object);
    if( CachedObjectPropertyData >= 0 )
    {
      v13 = (_DEVPROPKEY *)PropertyType;
      if( ObjectType != 3 || *((_DWORD *)PropertyType + 4) != 2 )
        goto LABEL_7;
      v15 = *PropertyType - *(_QWORD *)&DEVPKEY_Device_ContainerId.fmtid.Data1;
      if( *PropertyType == *(_QWORD *)&DEVPKEY_Device_ContainerId.fmtid.Data1 )
        v15 = PropertyType[1] - *(_QWORD *)DEVPKEY_Device_ContainerId.fmtid.Data4;
      if( !v15
        && PiDmObjectGetCachedObjectReference(
             3,
             ObjectName,
             (ULONG_PTR)Object,
             (_DEVPROPKEY *)&DEVPKEY_Device_InstanceId,
             &ReferencedObject) >= 0 )
      {
        v16 = v13;
        v17 = ReferencedObject;
        LODWORD(BufferSizea) = v12;
        CachedObjectPropertyData = PiDmObjectGetCachedObjectPropertyData(
                                     ReferencedObject[7],
                                     *((WCHAR **)ReferencedObject + 2),
                                     ReferencedObject,
                                     v16,
                                     (UINT64 *)PropertyBuffer,
                                     v10,
                                     BufferSizea,
                                     v21);
        PiDmObjectRelease(v17);
      }
      else
      {
LABEL_7:
        LODWORD(BufferSizea) = v12;
        CachedObjectPropertyData = PiDmObjectGetCachedObjectPropertyData(
                                     ObjectType,
                                     ObjectName,
                                     Object,
                                     v13,
                                     (UINT64 *)PropertyBuffer,
                                     v10,
                                     BufferSizea,
                                     v21);
      }
      PiDmObjectRelease(Object);
    }
  }
  return CachedObjectPropertyData;
}

Referenced by:

PiDmObjectGetCachedCmProperty
PiPnpRtlObjectActionCallback