Welcome to the ShlExt Homepage

This page is a repositry for undocumented shell information. It is also the home of shlext.h a header file defines all the undocuemtned structures functions and constants that I have been able to find and or reverse engineer myself.


A slightly out of date version of shlext.h, which has been updated work with the July 99 Platform SDK.
The files necessary to build shell32lib.lib - an extra link library that some users will need to link in the undocumented functions. The platform SDK that shipped with Visual C++ 5.0 included a shell32.lib with import entries for the undocumented functions. These have been removed from later Platform SDK's.

The Undocumented Shell Functions

The functionality of the undocuemnted shell functions can be broken down into several groups:

IDList Helper Functions
Path Helper Functions

Miscellaneous Functions



Since November of 1997 there have been 6 releases of the Platform SDK each one defining a few more of the previously undocumented structures and functions I have defined in shlext.h. This leaves shlext.h with a bit of a problem. If I leave it as is, users of the newer platform sdks' cannot compile due to duplicate definition errors. If I delete the newly defined information, users of older platform sdk's will not have critical structures documented at all! To get around this, I have defined some MACROS that allow shlext.h to be successfully used with many versions of the platform SDK.


Before including shlext.h in a source file you should define the version of the platform SDK you are using. Following is a table outlining the last 6 releases of the platform SDK, and what value to #define _PLATFORM_SDK as:

Edition _PLATFORM_SDK Products
September 1999 0x0500 October 1999 Microsoft Developer Network
July 1999 0x0450
June 1999 0x0400
September 1998 0x0300 Visual C++ 6.0
January 1998 0x0200
November 1997 0x0100

Platform Issues

In addition to the _PLATFORM_SDK MACRO it is also necessary to define (or not define) _WIN32_WINNT correctly to indicate the intended target OS. This is a standard MACRO, and documentation should be available in your compilers help regarding setting it correctly. shelext.h uses it to decide whether to define string parameters as ANSI or UNICODE. In addition, some functions are available only on one platform. Functions that are not available on the target platform will not be defined.


shlext.zip (8Kb)

Using Shell32lib.lib

The shell32lib project can be used to create an addition import library for shell32.dll that contains import descriptors for the undocumented functions. Using this import library is NOT recommended if you wish to target both 9X and NT platforms, as many of the undocumented functions exist at the same ordinal on both platform, but accept diffrent parameters. All string parameters are UNICODE on NT and ANSI on 9X.


shell32lib.zip (4Kb)