Extending the Shell's Namespace
A namespace extension provides a way for you to define a new object that a browser, such as the Windows Explorer, can explore. The code you provide and the registry entries you make define the icon images and text that the user sees while viewing your data, as well as the menus, toolbars, and status information the user can use on your data objects.
One of the reasons it is relatively simple to extend the shell's namespace is that the Explorer can be viewed as two independent parts: the browser code and the system namespace provider code. Because they were written polymorphically and communicate by using COM-based interfaces, they do not depend on each other's implementation. Thus, anyone can provide either browser code that browses the system namespace, or a namespace extension that extends the system namespace that can be browsed using the Explorer.
Your extension has to provide the Explorer with icons, names, and details you want to represent the items in your namespace. It can provide the Explorer with a custom context menu for your data, and drag-and-drop capabilities. A key thought to remember, however, is that the contents of your namespace are known only to you so the Explorer can work only with what you provide.