See the question and my original answer on StackOverflow

Unfortunately, what the file dialog shows is function of the app that opens it. Starting with Vista, it's the IFileDialog interface which is used, and it defines a set of options through the IFileDialog::SetOptions method.

The FOS_FORCEFILESYSTEM flag ensures that returned items are file system items (SFGAO_FILESYSTEM), and that depends on how you wrote your extension. SFGAO_FILESYSTEM should ring a bell, it's one of the flags the IShellFolder::GetAttributesOf method can return. If what you do is really virtual (ie: if you don't return this flag), they won't be shown when IFileDialog is configured like this.

If you test your extension with different apps (notepad, word, excel, browsers, etc.), you'll see that you see it sometimes, and sometimes you don't.

Spelunking into MFC's code (dlgfile.cpp), you will find this:

    // We only expect and handle file system paths (for compatibility with GetOpenFileName functionality), so set the
    // "force file system" flag which enables GetOpenFileName-like download behavior for non file system paths, unless
    // the m_bPickNonFileSysFoldersMode is set to allow picking non-file system folders (like libraries in Windows 7).
    if (m_bPickNonFileSysFoldersMode)
        dwFlags &= ~FOS_FORCEFILESYSTEM;

So, you need to set m_bPickNonFileSysFoldersMode to TRUE for CFileDialog to show your extension. in MFC you must derive from CFileDialog since this member is protected (BTW this is a stupid MFC design decision), for example::

class MyFileDialog : public CFileDialog
    MyFileDialog(LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);

MyFileDialog::MyFileDialog(LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(TRUE, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd)
    m_bPickNonFileSysFoldersMode = TRUE;

Last thing to remember: make sure your virtual folder (namespace extension, etc.) is registered with the same bitness (x86 vs x64) as the app using the CFileDialog.

But it won't fix other apps you don't own that use this flag...