CmGetInstallerClassMappedProperty
NTSTATUS __stdcall CmGetInstallerClassMappedProperty(
HPNPCTX *hPnpCtx,
const WCHAR *ClassGuid,
VOID *ObjectBaseKey,
const WCHAR *PropertyLocaleName,
const _DEVPROPKEY *PropertyKey,
UINT64 *PropertyType,
UINT8 *PropertyBuffer,
UINT64 BufferSize,
UINT64 *PropertySize){
NTSTATUS InstallerClassMappedPropertyFromRegProp;
DEVPROPKEY **v13;
DEVPROPKEY *v14;
const _DEVPROPKEY *v15;
unsigned int v16;
_QWORD *v17;
DEVPROPKEY **v18;
unsigned int v19;
DEVPROPKEY *v20;
__int64 v21;
__int64 v23;
__int64 v24;
__int64 v25;
INT64 v26;
UINT64 v27;
InstallerClassMappedPropertyFromRegProp = -1073741802;
*(_DWORD *)PropertySize = 0;
if( !PropertyLocaleName )
{
v13 = &CmClassRegPropMap;
while( 1 )
{
v14 = *v13;
if( *v13 && PropertyKey->pid == v14->pid )
{
v23 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v14->fmtid.Data1;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v14->fmtid.Data1 )
v23 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v14->fmtid.Data4;
if( !v23 )
break;
}
LODWORD(PropertyLocaleName) = (_DWORD)PropertyLocaleName + 1;
v13 += 3;
if( (unsigned int)PropertyLocaleName >= 9 )
goto LABEL_6;
}
LODWORD(v27) = BufferSize;
InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromRegProp(
hPnpCtx,
(WCHAR *)ClassGuid,
ObjectBaseKey,
(_DEVPROPKEY *)PropertyKey,
PropertyType,
PropertyBuffer,
v27,
PropertySize);
if( InstallerClassMappedPropertyFromRegProp != -1073741802 )
return InstallerClassMappedPropertyFromRegProp;
LABEL_6:
v15 = (const _DEVPROPKEY *)&Create;
v16 = 0;
while( 1 )
{
v17 = *(_QWORD **)&v15->fmtid.Data1;
if( PropertyKey->pid == *(_DWORD *)(*(_QWORD *)&v15->fmtid.Data1 + 16i64) )
{
v24 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *v17;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *v17 )
v24 = *(_QWORD *)PropertyKey->fmtid.Data4 - v17[1];
if( !v24 )
break;
}
++v16;
v15 = (const _DEVPROPKEY *)((char *)v15 + 32);
if( v16 >= 0xD )
goto LABEL_9;
}
LODWORD(v27) = BufferSize;
InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromRegValue(
hPnpCtx,
ClassGuid,
ObjectBaseKey,
PropertyKey,
PropertyType,
PropertyBuffer,
v27,
PropertySize);
if( InstallerClassMappedPropertyFromRegProp != -1073741802 )
return InstallerClassMappedPropertyFromRegProp;
LABEL_9:
if( PropertyKey->pid != 2 )
goto LABEL_10;
v25 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&DEVPKEY_DeviceClass_ClassCoInstallers.fmtid.Data1;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&DEVPKEY_DeviceClass_ClassCoInstallers.fmtid.Data1 )
v25 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)DEVPKEY_DeviceClass_ClassCoInstallers.fmtid.Data4;
if( v25
|| (LODWORD(v26) = BufferSize,
InstallerClassMappedPropertyFromRegProp = CmGetInstallerClassMappedPropertyFromCoInstallers(
hPnpCtx,
ClassGuid,
v15,
PropertyType,
PropertyBuffer,
v26,
PropertySize),
InstallerClassMappedPropertyFromRegProp == -1073741802) )
{
LABEL_10:
v18 = &off_140983F60;
v19 = 0;
while( 1 )
{
v20 = *v18;
if( PropertyKey->pid == (*v18)->pid )
{
v21 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v20->fmtid.Data1;
if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v20->fmtid.Data1 )
v21 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v20->fmtid.Data4;
if( !v21 )
break;
}
++v19;
v18 += 2;
if( v19 >= 4 )
return InstallerClassMappedPropertyFromRegProp;
}
LODWORD(v27) = BufferSize;
return CmGetInstallerClassMappedPropertyFromComposite(
hPnpCtx,
(WCHAR *)ClassGuid,
ObjectBaseKey,
(_DEVPROPKEY *)PropertyKey,
PropertyType,
PropertyBuffer,
v27,
PropertySize);
}
}
return InstallerClassMappedPropertyFromRegProp;
}Referenced by:
PnpDispatchInstallerClass