ECom provides two ways to prevent a RAM-based plug-in from being used:
by using the ROM-only resolver to restrict plug-ins to those that live in ROM
by preventing a ROM-based implementation from being overridden by a RAM-based implementation.
The ROM-only resolver provides the ability to prevent the use of plug-ins that are not in the ROM when searching for an implementation.
To use this resolver, applications must specify
KRomOnlyResolverUid
as the CResolver
UID passed to those variants of
REComSession::ListImplementationsL()
and
REComSession::CreateImplementationL()
that take the
TUid aResolverUid
parameter.
If an installable upgrade to a ROM-based plug-in is correctly supplied by a vendor, then the ROM-only resolver will find and use the upgrade. Platform security controls are used to ensure that the upgrade is secure. For details, see How to upgrade ROM-based plug-ins securely.
A plug-in wishing to prevent one or more of its implementations being
overridden by a RAM-based implementation with a higher version number can
specify that those implementations are ROM-only. It does this in the source
resource file (.rss
).
The resource file is where the plug-in declares its set of
implementations and interfaces. The resource structures are usually defined in
the file RegistryInfo.rh
, which is included in the source resource
(.rss) file. However, a plug-in that wants to declare one or more
ROM-only implementations must use slightly modified resource
structures declared in the file RegistryInfoV2.rh
, and this header
file must be used instead of (i.e. not in addition to)
RegistryInfo.rh
.
The two structs: REGISTRY_INFO
and
IMPLEMENTATION_INFO
are slightly modified
in RegistryInfoV2.rh
:
The REGISTRY_INFO
struct
contains an additional member labelled resource_format_version
that, when set to RESOURCE_FORMAT_VERSION_2, tells ECom that this plug-in
resource file is in the version 2 format.
The IMPLEMENTATION_INFO
struct
contains an additional member labelled rom_only
. This is set to 1
to indicate a ROM-only implementation, and is set to 0 for implementations that
do not require this protection.
Care must be taken to explicitly set one of these values for all implementations declared in the file; those implementation that are not intended to be ROM-only must have a value set.
Note that RAM-based plug-ins can also use the version 2 resource file format. However, any implementation in such a plug-in that tries to declare itself as ROM-only is discarded and cannot be used.
See the example in writing a version 2 registration resource file.