A handler may implement additional protocols and override the QueryProtocol function to give client applications access to new protocols. If the client requests a protocol that the handler has defined, the handler must allocate a data structure and set the first entry to be a pointer to a VTBL structure, which contains pointers to functions for the new protocol. The pointer to the allocated structure should be returned as the value of the QueryProtocol function. The handler must ensure that the data structure is freed when the object is released. The handler may use the ObjectLong function to associate additional data with the original OLEOBJECT structure.