Writing the Version 3 Registration Resource File

The version 3 registration resource file is an evolution of the version 2 . This version is evolved to accommodate extended interfaces.

  1. Set Info_format to the type of info record that is, IMPLEMENTATION_INFO or BINARY_IMPLEMENTATION_INFO.
  2. 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.

  3. 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.

  4. extended_interfaces a maximum 8 UID's extended interfaces for both IMPLEMENTATION_INFO structure and BINARY_IMPLEMENTATION_INFO structure.
  5. 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.

  6. In REGISTRY_INFO structure, the resource_format_version must be RESOURCE_FORMAT_VERSION_3 .
  7. In INTERFACE_INFOstructure, the interface_uid is renamed to instantiation_interface_uid.
  8. 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.