PiDmObjectGetCachedObjectProperty
__int64 __fastcall PiDmObjectGetCachedObjectProperty(
int a1,
wchar_t *a2,
__int64 a3,
__int64 a4,
__int64 a5,
_DWORD *a6,
GUID *a7,
INT64 a8,
unsigned int *a9){
INT64 v11;
int Object;
int v13;
__int64 v14;
__int64 v16;
INT64 v17;
CHAR *v18;
INT64 a7a;
void *P[2];
PVOID v21;
P[0] = 0i64;
v21 = 0i64;
v11 = (INT64)a7;
Object = -1073741802;
if( a7 )
{
v13 = a8;
v11 = -(__int64)((_DWORD)a8 != 0) & (unsigned __int64)a7;
}
else
{
v13 = 0;
}
if( a1 < 7 && !a4 )
{
Object = PiDmGetObject((unsigned int)a1, a2, (INT64 *)P);
if( Object >= 0 )
{
v14 = a5;
if( a1 != 3 || *(_DWORD *)(a5 + 16) != 2 )
goto LABEL_7;
v16 = *(_QWORD *)a5 - *(_QWORD *)&DEVPKEY_Device_ContainerId.fmtid.Data1;
if( *(_QWORD *)a5 == *(_QWORD *)&DEVPKEY_Device_ContainerId.fmtid.Data1 )
v16 = *(_QWORD *)(a5 + 8) - *(_QWORD *)DEVPKEY_Device_ContainerId.fmtid.Data4;
if( !v16
&& (int)PiDmObjectGetCachedObjectReference(3, a2, (ULONG_PTR)P[0], (__int64)&DEVPKEY_Device_InstanceId, &v21) >= 0 )
{
v17 = v14;
v18 = (CHAR *)v21;
LODWORD(a7a) = v13;
Object = PiDmObjectGetCachedObjectPropertyData(
*((unsigned int *)v21 + 7),
*((WCHAR **)v21 + 2),
(UINT64)v21,
v17,
(INT64)a6,
v11,
a7a,
(INT64)a9);
PiDmObjectRelease(v18);
}
else
{
LABEL_7:
LODWORD(a7a) = v13;
Object = PiDmObjectGetCachedObjectPropertyData(
(unsigned int)a1,
a2,
(UINT64)P[0],
v14,
(INT64)a6,
v11,
a7a,
(INT64)a9);
}
PiDmObjectRelease((CHAR *)P[0]);
}
}
return(unsigned int)Object;
}Referenced by:
PiDmObjectGetCachedCmProperty
PiPnpRtlObjectActionCallback