PiDmGetReferencedObjectFromProperty
NTSTATUS __stdcall PiDmGetReferencedObjectFromProperty(
PNP_OBJECT_TYPE ObjectType,
WCHAR *ObjectName,
PVOID Object,
VOID *PropertyKey,
const _DEVPROPKEY *ReferencedObjectType,
PNP_OBJECT_TYPE ReferencedObject,
PI_DM_OBJECT **Objecta){
NTSTATUS CachedObjectReference;
int v10;
int ObjectProperty;
UINT64 v13;
_GUID *v14;
WCHAR *v15;
INT64 v16;
_GUID *Guid;
__int64 v18;
WCHAR GuidString[40];
LODWORD(v16) = 0;
Guid = 0i64;
*Objecta = 0i64;
CachedObjectReference = PiDmObjectGetCachedObjectReference(
ObjectType,
ObjectName,
(ULONG_PTR)Object,
(_DEVPROPKEY *)ReferencedObjectType,
Objecta);
v10 = CachedObjectReference;
if( CachedObjectReference >= 0 )
{
if( (*Objecta)[7] != ReferencedObject )
{
PiDmObjectRelease(*Objecta);
*Objecta = 0i64;
return -1073741772;
}
return v10;
}
if( CachedObjectReference != -1073741802 )
return v10;
ObjectProperty = PnpGetObjectProperty(
0x5A706E50u,
0x10ui64,
(INT64)ObjectName,
ObjectType,
0i64,
0i64,
(INT64)ReferencedObjectType,
(INT64)&v16,
(__int64)&Guid,
(__int64)&v18);
v14 = Guid;
v10 = ObjectProperty;
if( ObjectProperty >= 0 )
{
if( (_DWORD)v16 == 13 )
{
v10 = PnpStringFromGuid(Guid, GuidString, v13);
if( v10 < 0 )
goto LABEL_11;
v15 = GuidString;
goto LABEL_10;
}
if( (_DWORD)v16 == 18 )
{
v15 = (WCHAR *)Guid;
LABEL_10:
v10 = PiDmGetObject(ReferencedObject, v15, Objecta);
goto LABEL_11;
}
v10 = -1073741772;
}
LABEL_11:
if( v14 )
ExFreePoolWithTag(v14, 0x5A706E50u);
return v10;
}Referenced by:
PiDmObjectProcessPropertyChange