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