PiDmObjectGetCachedCmProperty
NTSTATUS __stdcall PiDmObjectGetCachedCmProperty(
_CM_OBJECT_TYPE CmObjectType,
WCHAR *CmObjectName,
PI_DM_OBJECT *CmRegProp,
_CM_REG_PROP CmRegPropType,
UINT8 *PropertyBuffer,
UINT8 *PropertySize,
UINT64 *PropertySizea){
unsigned __int64 v7;
int CachedObjectProperty;
PNP_OBJECT_TYPE v10;
WCHAR *v11;
WCHAR *v12;
UINT64 v13;
__int128 v14;
__int128 v15;
int v16;
__int128 v17;
__int128 v18;
UINT64 *v19;
char v20[4];
_GUID Guid;
WCHAR GuidString[8];
__int128 v23;
__int128 v24;
__int128 v25;
__int64 v26;
int v27;
__int16 v28;
v7 = (unsigned __int64)PropertySize;
CachedObjectProperty = -1073741802;
Guid = 0i64;
if( PropertySize )
v7 = -(__int64)(*(_DWORD *)PropertySizea != 0) & (unsigned __int64)PropertySize;
else
*(_DWORD *)PropertySizea = 0;
if( CmRegPropType == CM_REG_PROP_CLASSGUID && CmObjectType == CM_OBJECT_TYPE_DEVICE )
{
v10 = CmMapCmObjectTypeToPnpObjectType(CM_OBJECT_TYPE_DEVICE);
LODWORD(v19) = 16;
CachedObjectProperty = PiDmObjectGetCachedObjectProperty(
v10,
v12,
v11,
0i64,
(UINT64 *)&DEVPKEY_Device_ClassGuid.fmtid.Data1,
(UINT8 *)v20,
(UINT64)&Guid,
v19);
if( CachedObjectProperty >= 0 )
{
*(_DWORD *)PropertyBuffer = 1;
if( *(_DWORD *)PropertySizea < 0x4Eu )
{
*(_DWORD *)PropertySizea = 78;
return -1073741789;
}
else
{
CachedObjectProperty = PnpStringFromGuid(&Guid, GuidString, v13);
if( CachedObjectProperty >= 0 )
{
v14 = *(_OWORD *)GuidString;
v15 = v23;
v16 = v27;
*(_DWORD *)PropertySizea = 78;
*(_OWORD *)v7 = v14;
v17 = v24;
*(_OWORD *)(v7 + 16) = v15;
v18 = v25;
*(_OWORD *)(v7 + 32) = v17;
*(_QWORD *)&v17 = v26;
*(_OWORD *)(v7 + 48) = v18;
*(_QWORD *)(v7 + 64) = v17;
*(_DWORD *)(v7 + 72) = v16;
*(_WORD *)(v7 + 76) = v28;
}
}
}
}
return CachedObjectProperty;
}Referenced by:
PiPnpRtlCmActionCallback