The version 3 registration resource file is an evolution of the version 2 . This version is evolved to accommodate extended interfaces.
Set Info_format
to the type of info record that is, IMPLEMENTATION_INFO or BINARY_IMPLEMENTATION_INFO.
default_data:
The data identifier field used by the resolver to determine if the implementation
matches a client request.
In IMPLEMENTATION_INFO structure, the data type
is changed to accommodate maximum 2 strings with 255 bytes each.
In BINARY_IMPLEMENTATION_INFO,
the data type is changed to accommodate a maximum 512 bytes.
opaque_data:
A binary data field that can contain additional data. This additional data
can be used by the custom resolvers.
In IMPLEMENTATION_INFO structure, the data type
is changed to accommodate maximum 2 strings with 255 bytes each.
In BINARY_IMPLEMENTATION_INFO structure,
the data type is changed to accommodate a maximum 512 bytes.
extended_interfaces a
maximum 8 UID's extended interfaces for both IMPLEMENTATION_INFO structure
and BINARY_IMPLEMENTATION_INFO structure.
FLAG_ROM_ONLY changed
from bool data type to bit flag.
rom_only set to 1 indicates the ROM-only implementation
must be used.
rom_only set to 0 indicates the ROM-only
implementation can be overidden.
In REGISTRY_INFO structure,
the resource_format_version must be RESOURCE_FORMAT_VERSION_3 .
In INTERFACE_INFOstructure,
the interface_uid is renamed to instantiation_interface_uid.
In REGISTRY_INFO structure,
the resource_format_version must be RESOURCE_FORMAT_VERSION_3.
#define IMPLEMENTATION_INFO_RECORD_TYPE1 1
STRUCT IMPLEMENTATION_INFO
{
BYTE info_format; // = IMPLEMENTATION_INFO_RECORD_TYPE1
LONG implementation_uid;
BYTE version_no;
LTEXT display_name;
LEN BYTE LTEXT8 default_data[]; // maximum 2 strings with 255 bytes each
LEN BYTE LTEXT8 opaque_data[]; // maximum 2 strings with 255 bytes each
LONG extended_interfaces[]; // maximum 8 extended interfaces
BYTE flags;
}
#define IMPLEMENTATION_INFO_RECORD_TYPE2 2
STRUCT BINARY_IMPLEMENTATION_INFO
{
BYTE info_format; // = IMPLEMENTATION_INFO_RECORD_TYPE2
LONG implementation_uid;
BYTE version_no;
LTEXT display_name;
BYTE default_data[]; // maximum 512 bytes
BYTE opaque_data[]; // maximum 512 bytes
LONG extended_interfaces[]; // maximum 8 extended interfaces
BYTE flags;
}
STRUCT INTERFACE_INFO
{
LONG instantiation_interface_uid;
STRUCT implementations[]; // maximum 8 implementations for each interface
}
STRUCT REGISTRY_INFO
{
LONG resource_format_version; // Use RESOURCE_FORMAT_VERSION_3
LONG dll_uid;
STRUCT interfaces[]; // maximum 4 interfaces
} Maximum of fourINTERFACE_INFO structures can be defined
in one resource file.
Maximum of eight IMPLEMENTATION_INFO or BINARY_IMPLEMENTATION_INFO structures
in each INTERFACE_INFO . Totally eight structures can be
defined.
Maximum eight extended interfaces in each IMPLEMENTATION_INFO record.
In a IMPLEMENTATION_INFO record a maximum of two strings
with 255 bytes each can be used for default_data oropaque_data definitions.
In a BINARY_IMPLEMENTATION_INFO record, a maximum
of 512 bytes each for default_data or opaque_data definitions.