IETechnicalChallenge

From Foxmarks Wiki

Jump to: navigation, search

We Need Your Help

The Foxmarks plugin for IE cannot always guarantee that the order of bookmarks will be same between two computers after a sync. Getting this right is crucial to providing an excellent user experience, and we are working hard to resolve this problem. However, developing in the IE world is a complex affair, and sometimes not all the bits that we need are documented.

We're looking for a talented individual to help us figure out how to get bookmarking ordering in Internet Explorer working correctly. Specifically, we're looking for someone who:

  • Has substantial development experience on the Win32 platform
  • Has developed one or more plugs-ins for Internet Explorer
  • Is familiar with reverse-engineering techniques as well as tools such as Windbg, BoundsChecker, etc.
  • Has contributed to the unearthing of at least one otherwise undocumented API within Windows

If you fit the profile and are up for the challenge, please have a look at the technical details below to get familiarized with the problem.

If you're still interested, please write to us. We will naturally compensate your technical contributions at the going rate for such efforts, but in addition, we will heap as much praise upon you as you can stand (no really, we will).

Technical Details

IE's Favorites are stored as files and folders on disk (for example, C:\Users\<User name>\Favorites in Windows Vista). Unfortunately, since a user's Favorites are just files in the filesystem, there's no way to assign an order to them. Therefore, the order must be stored somewhere else. For Internet Explorer, that somewhere else is the Windows registry. Each folder has a corresponding registry entry that provides ordering information for the Favorites in that folder. There is a great article about the order entry format here.

Though we are able to read and write the order into the registry, unfortunately this isn't enough to make IE happy. After writing to the registry we notify Windows that we made a change using something like SHChangeNotify(SHCNE_UPDATEDIR, SHCNF_PATH, <path to Favorites>, NULL);. The IE7 Favorites Center responds correctly and reparses the order registry value. However, the Favorites Menu (in IE7 and IE6) does not do anything in response to this message.

More specifically, it appears that Internet Explorer correctly reads our order the first time a user opens the Favorites Menu. However, that order seems to get cached. After opening the Favorites Menu for the first time, IE no longer responds to our changes to the registry or our notification messages to the shell. We can change the registry order all we want, but IE continues reads the original order, which must be cached in some location that is generated by the Favorites Menu.

And this is where we're stuck. We need to figure out exactly what happens when a user opens the Favorites Menu and how we can force Internet Explorer to reparse the order from a registry entry on our command.

Personal tools
Frequently Asked Questions