In this series, I will be presenting Windows Vista functionality with a focus on the the file system namespace. Feel free to ask questions, especially if you want to know how things work on XP or in other namespaces, since I'll otherwise ignore those topics for now.
But first, let's get some terminology out of the way.
The Windows Shell includes the Windows user interface and also reusable bits such as the save-as and folder browser dialogs. The shell includes things like the start menu, task bar, desktop, folder views, details pane, properties dialog, and the search UI.
The Indexer is a service that gathers properties and full text from files and items and answers search queries.
There are also various other applications that choose to use the property system to read or write properties to files.
All these applications connect to the property system via IShellItem2::GetPropertyStore. This API creates a bunch of components and stacks them together.
The top layer I'm calling the Coercion Layer. It's job is to ensure that values are of the correct type by weeding out bad ones, removing duplicates from vectors, and trimming spaces from strings.
The Shell Item Layer provides a set of properties, including PKEY_SFGAOFlags. The shell item layer sits atop the shell namespace extensibility point. As I mentioned earlier, I will focus on one in particular: the file system namespace.
The Shell File System Namespace provides properties about files such as PKEY_Size and PKEY_ItemType. It sits atop the property handler extensibility point.
The Property Handler is at the bottom of the stack and provides a set of properties derived from the contents of a file. Property handlers exist only in the file system namespace.
The way to really grok this stack is to understand that each layer wraps the one below it. When asked for a property, any given layer chooses whether to return the value itself or to ask the layer beneath it. The property stack is really just a chain of command.