Bookmark is a property of the TIB_Cursor, TIB_Query, TIBOQuery and TIBOTable components. It is merely a string so it is much more flexible to work with. You don't have to do the FreeBookmark() stuff since Delphi string handling is garbage collected.
The contents of the bookmark are dependant upon the KeyLinks property. So, if the KeyLinks are the same between two different datasets Bookmarks can be assigned back and fourth between them.
It is very easy to manually construct a bookmark by using the KeyFields property. You get one key field for each item you put in the KeyLinks directory. They can be accessed using the KeyFieldByName() or FindKeyField() methods. Simply populate the field or fields that are in the KeyFields array and then access the KeyFields.RowData property. This string is exactly the same format as a bookmark.