If a user creates a shortcut to an object and the name or location of the object is subsequently changed, the system automatically takes steps to update, or resolve, the shortcut the next time the user selects it. However, if an application creates a shell link and stores it in a stream, the system does not automatically attempt to resolve the link. The application must resolve the link by calling the IShellLink::Resolve member function.
When a shell link is created, the system saves information about the link. When resolving a link (either automatically or if IShellLink::Resolve is called), the system first retrieves the path associated with the shell link by using a pointer to the shell link's identifier list. (For more information about the identifier list, see Item Identifiers and Identifier Lists.) The system searches for the associated object in that path and, if it finds the object, resolves the link. If the system cannot find the object, it looks in the same directory for an object that has the same file creation time and attributes, but a different name. This type of search resolves a link to an object that has been renamed.
If the system still cannot find the object, it searches the subdirectories of the current directory, looking recursively though the directory tree for a match with either the same name or creation time. If the system does not find a match after that, it displays a dialog box prompting the user for a location. An application can suppress the dialog box by specifying the SLR_NO_UI value in a call to IShellLink::Resolve.