Registering Shell Extensions

A shell extension must be registered in the registry database. The class identifier of each handler must be registered under the HKEY_CLASSES_ROOT\CLSID key. The CLSID key contains a list of class identifier key values, such as {00030000-0000-0000-C000-000000000046}. Each class identifier key is a globally unique identifier (GUID) generated by the UUIDGEN tool. Within each class identifier key, the handler adds an InProcServer32 key that gives the location of the handler's DLL. It is best to give the complete path for the handler; using the complete path keeps the handler independent of the current path and speeds up the load time for the DLL.

The information that the shell uses to associate a shell extension handler with a file type is stored under the shellex key. The shell also uses several other special keys under HKEY_CLASSES_ROOT to look for shell extensions: *, Folder, Drives, Printers, and keys for network providers. Descriptions of the keys follow:

ˇYou can use the * key to register handlers that the shell calls whenever it creates a context menu or property sheet for a file object in the following manner.

HKEY_CLASSES_ROOT

* = *

shellex

ContextMenuHandlers

{00000000-1111-2222-3333-00000000000001}

PropertySheetHandlers

{00000000-1111-2222-3333-00000000000002}

The shell uses instances of the ExtraMenu and SummaryInfo handlers to add to the context menus and property sheets for every file object.

ˇYou can use Folder key to register a shell extension for directories in the file system. You can register context menu handlers, copy hook handlers, and property sheet handlers in the same way you register these handlers for the * key. An additional handler, the drag and drop handler, applies only to the Folder and Printers keys. An example showing the Folder key follows.

Folder = Folder

shellex

DragDropHandlers

{00000000-1111-2222-3333-00000000000004}

CopyHookHandlers

{00000000-1111-2222-3333-00000000000005}

ˇYou can use the Drives key for the same registrations as the Folder key, but the Drives key is called only for root paths (for example, C: \).

ˇThe Printers key allows the same registrations as the Folder key, but it uses additional handlers for printer events, deletion or removal of printers (through the copy hook handler), and printer properties (with property sheet handlers and context menu handlers).

To avoid conflicts with other classes, you must use real GUIDs, not the sample strings shown in the previous examples.