A bookmark can become invalid for any of the following reasons:
Bookmarks that have been returned by the provider are guaranteed to have predictable behavior, even if they have become invalid. If the DBPROP_BOOKMARKSKIPPED property is VARIANT_TRUE, the provider skips the bookmarked row and proceeds to the next row. If the DBPROP_BOOKMARKSKIPPED property is not VARIANT_TRUE, the provider will usually return an error. Never must the provider terminate abnormally for a bookmark that it has returned to the user.
Note, however, that passing a random bookmark value that has not been obtained from the provider is a programming error. The effect of specifying an unknown, random bookmark value is undefined and may include abnormal termination.