CmGetDeviceInterfaceMappedProperty

NTSTATUS __stdcall CmGetDeviceInterfaceMappedProperty(
        HPNPCTX *hPnpCtx,
        const WCHAR *DeviceInterfaceName,
        VOID *ObjectBaseKey,
        const WCHAR *PropertyLocaleName,
        const _DEVPROPKEY *PropertyKey,
        UINT64 *PropertyType,
        UINT8 *PropertyBuffer,
        UINT64 BufferSize,
        UINT64 *PropertySize){
  NTSTATUS DeviceInterfaceMappedPropertyFromRegValue; 
  DEVPROPKEY **v13; 
  DEVPROPKEY *v14; 
  DEVPROPKEY **v15; 
  unsigned int v16; 
  DEVPROPKEY *v17; 
  __int64 v18; 
  __int64 v20; 
  UINT64 v21; 

  DeviceInterfaceMappedPropertyFromRegValue = -1073741802;
  *(_DWORD *)PropertySize = 0;
  if( !PropertyLocaleName )
  {
    v13 = &off_140983A68;
    while( 1 )
    {
      v14 = *v13;
      if( *v13 && PropertyKey->pid == v14->pid )
      {
        v20 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v14->fmtid.Data1;
        if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v14->fmtid.Data1 )
          v20 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v14->fmtid.Data4;
        if( !v20 )
          break;
      }
      LODWORD(PropertyLocaleName) = (_DWORD)PropertyLocaleName + 1;
      v13 += 2;
      if( (unsigned int)PropertyLocaleName >= 3 )
        goto LABEL_6;
    }
    LODWORD(v21) = BufferSize;
    DeviceInterfaceMappedPropertyFromRegValue = CmGetDeviceInterfaceMappedPropertyFromRegValue(
                                                  hPnpCtx,
                                                  DeviceInterfaceName,
                                                  ObjectBaseKey,
                                                  PropertyKey,
                                                  PropertyType,
                                                  PropertyBuffer,
                                                  v21,
                                                  PropertySize);
    if( DeviceInterfaceMappedPropertyFromRegValue != -1073741802 )
      return DeviceInterfaceMappedPropertyFromRegValue;
LABEL_6:
    v15 = &off_140983FA0;
    v16 = 0;
    while( 1 )
    {
      v17 = *v15;
      if( PropertyKey->pid == (*v15)->pid )
      {
        v18 = *(_QWORD *)&PropertyKey->fmtid.Data1 - *(_QWORD *)&v17->fmtid.Data1;
        if( *(_QWORD *)&PropertyKey->fmtid.Data1 == *(_QWORD *)&v17->fmtid.Data1 )
          v18 = *(_QWORD *)PropertyKey->fmtid.Data4 - *(_QWORD *)v17->fmtid.Data4;
        if( !v18 )
          break;
      }
      ++v16;
      v15 += 2;
      if( v16 >= 4 )
        return DeviceInterfaceMappedPropertyFromRegValue;
    }
    LODWORD(v21) = BufferSize;
    return CmGetDeviceInterfaceMappedPropertyFromComposite(
             hPnpCtx,
             (WCHAR *)DeviceInterfaceName,
             ObjectBaseKey,
             (_DEVPROPKEY *)PropertyKey,
             PropertyType,
             PropertyBuffer,
             v21,
             PropertySize);
  }
  return DeviceInterfaceMappedPropertyFromRegValue;
}

Referenced by:

PnpDispatchDeviceInterface