PiDmGetReferencedObjectFromProperty
INT64 __fastcall PiDmGetReferencedObjectFromProperty(
UINT64 a1,
WCHAR *a2,
CHAR *a3,
INT64 a4,
INT64 a5,
INT64 a6,
INT64 *a7){
unsigned int v8;
int CachedObjectReference;
unsigned int Object;
int ObjectProperty;
PVOID v13;
int v14;
WCHAR *v15;
INT64 v16;
UINT64 v17;
PVOID P;
ULONG v19[2];
__int16 v20[40];
v8 = a1;
LODWORD(v17) = 0;
P = 0i64;
*a7 = 0i64;
CachedObjectReference = PiDmObjectGetCachedObjectReference(a1, a2, (ULONG_PTR)a3, a5, a7);
Object = CachedObjectReference;
if( CachedObjectReference >= 0 )
{
if( *(_DWORD *)(*a7 + 28) != (_DWORD)a6 )
{
PiDmObjectRelease((CHAR *)*a7);
*a7 = 0i64;
return(unsigned int)-1073741772;
}
return Object;
}
if( CachedObjectReference != -1073741802 )
return Object;
LODWORD(v16) = 0;
ObjectProperty = PnpGetObjectProperty(
1517317712i64,
16i64,
(INT64)a2,
v8,
0i64,
0i64,
(INT64 *)a5,
(UINT64)&v17,
(INT64)&P,
v19,
v16);
v13 = P;
Object = ObjectProperty;
if( ObjectProperty >= 0 )
{
if( (_DWORD)v17 == 13 )
{
PnpStringFromGuid((int *)P, (wchar_t *)v20);
Object = v14;
if( v14 < 0 )
goto LABEL_11;
v15 = (WCHAR *)v20;
goto LABEL_10;
}
if( (_DWORD)v17 == 18 )
{
v15 = (WCHAR *)P;
LABEL_10:
Object = PiDmGetObject((unsigned int)a6, v15, a7);
goto LABEL_11;
}
Object = -1073741772;
}
LABEL_11:
if( v13 )
ExFreePoolWithTag(v13, 0x5A706E50u);
return Object;
}Referenced by:
PiDmObjectProcessPropertyChange