ReactOS 0.4.16-dev-1946-g52006dd
shellole.c File Reference
#include <wine/config.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <windef.h>
#include <winbase.h>
#include <shellapi.h>
#include <shlobj.h>
#include <shlwapi.h>
#include <debughlp.h>
#include <wine/debug.h>
#include <wine/unicode.h>
#include "shell32_main.h"
Include dependency graph for shellole.c:

Go to the source code of this file.

Classes

struct  IDefClFImpl
 

Macros

#define WIN32_NO_STATUS
 
#define _INC_WINDOWS
 
#define COBJMACROS
 
#define NONAMELESSUNION
 

Typedefs

typedef HRESULT(CALLBACKLPFNCREATEINSTANCE) (IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (shell)
 
INT WINAPI SHStringFromGUIDW (REFGUID guid, LPWSTR lpszDest, INT cchMax)
 
static IClassFactoryIDefClF_fnConstructor (LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
 
HRESULT WINAPI SH32_CoCreateInstance (LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, DWORD dwClsCtx, REFIID refiid, LPVOID *ppv)
 
HRESULT WINAPI SHCoCreateInstance (LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppv)
 
HRESULT WINAPI SH32_ExtCoCreateInstance (_In_opt_ LPCWSTR aclsid, _In_opt_ const CLSID *clsid, _In_opt_ LPUNKNOWN pUnkOuter, _In_ DWORD dwClsCtx, _In_ REFIID riid, _Out_ LPVOID *ppv)
 
HRESULT WINAPI SHExtCoCreateInstance (_In_opt_ LPCWSTR aclsid, _In_opt_ const CLSID *clsid, _In_opt_ LPUNKNOWN pUnkOuter, _In_ REFIID riid, _Out_ LPVOID *ppv)
 
HRESULT WINAPI DllGetClassObject (REFCLSID rclsid, REFIID iid, LPVOID *ppv)
 
DWORD WINAPI SHCLSIDFromStringA (LPCSTR clsid, CLSID *id)
 
DWORD WINAPI SHCLSIDFromStringW (LPCWSTR clsid, CLSID *id)
 
DWORD WINAPI SHCLSIDFromStringAW (LPCVOID clsid, CLSID *id)
 
HRESULT WINAPI SHGetMalloc (LPMALLOC *lpmal)
 
LPVOID WINAPI SHAlloc (SIZE_T len)
 
void WINAPI SHFree (LPVOID pv)
 
HRESULT WINAPI SHGetDesktopFolder (IShellFolder **psf)
 
static IDefClFImplimpl_from_IClassFactory (IClassFactory *iface)
 
static HRESULT WINAPI IDefClF_fnQueryInterface (LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj)
 
static ULONG WINAPI IDefClF_fnAddRef (LPCLASSFACTORY iface)
 
static ULONG WINAPI IDefClF_fnRelease (LPCLASSFACTORY iface)
 
static HRESULT WINAPI IDefClF_fnCreateInstance (LPCLASSFACTORY iface, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject)
 
static HRESULT WINAPI IDefClF_fnLockServer (LPCLASSFACTORY iface, BOOL fLock)
 
HRESULT WINAPI SHCreateDefClassObject (REFIID riid, LPVOID *ppv, LPFNCREATEINSTANCE lpfnCI, LPDWORD pcRefDll, REFIID riidInst)
 
void WINAPI DragAcceptFiles (HWND hWnd, BOOL b)
 
void WINAPI DragFinish (HDROP h)
 
BOOL WINAPI DragQueryPoint (HDROP hDrop, POINT *p)
 
UINT WINAPI DragQueryFileA (HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength)
 
UINT WINAPI DragQueryFileW (HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
 
HRESULT WINAPI SHPropStgCreate (IPropertySetStorage *psstg, REFFMTID fmtid, const CLSID *pclsid, DWORD grfFlags, DWORD grfMode, DWORD dwDisposition, IPropertyStorage **ppstg, UINT *puCodePage)
 
HRESULT WINAPI SHPropStgReadMultiple (IPropertyStorage *pps, UINT uCodePage, ULONG cpspec, const PROPSPEC *rgpspec, PROPVARIANT *rgvar)
 
HRESULT WINAPI SHPropStgWriteMultiple (IPropertyStorage *pps, UINT *uCodePage, ULONG cpspec, const PROPSPEC *rgpspec, PROPVARIANT *rgvar, PROPID propidNameFirst)
 
HRESULT WINAPI SHCreateQueryCancelAutoPlayMoniker (IMoniker **moniker)
 

Variables

struct {
   REFIID   clsid
 
   LPFNCREATEINSTANCE   lpfnCI
 
InterfaceTable []
 
static const IClassFactoryVtbl dclfvt
 

Macro Definition Documentation

◆ _INC_WINDOWS

#define _INC_WINDOWS

Definition at line 29 of file shellole.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 30 of file shellole.c.

◆ NONAMELESSUNION

#define NONAMELESSUNION

Definition at line 31 of file shellole.c.

◆ WIN32_NO_STATUS

#define WIN32_NO_STATUS

Definition at line 28 of file shellole.c.

Typedef Documentation

◆ LPFNCREATEINSTANCE

typedef HRESULT(CALLBACK * LPFNCREATEINSTANCE) (IUnknown *pUnkOuter, REFIID riid, LPVOID *ppvObject)

Definition at line 52 of file shellole.c.

Function Documentation

◆ DllGetClassObject()

HRESULT WINAPI DllGetClassObject ( REFCLSID  rclsid,
REFIID  iid,
LPVOID ppv 
)

Definition at line 245 of file shellole.c.

246{
247 IClassFactory * pcf = NULL;
249 int i;
250
251 TRACE("CLSID:%s,IID:%s\n",shdebugstr_guid(rclsid),shdebugstr_guid(iid));
252
253 if (!ppv) return E_INVALIDARG;
254 *ppv = NULL;
255
256 /* search our internal interface table */
257 for(i=0;InterfaceTable[i].clsid;i++) {
258 if(IsEqualIID(InterfaceTable[i].clsid, rclsid)) {
259 TRACE("index[%u]\n", i);
261 break;
262 }
263 }
264
265 if (!pcf) {
266 FIXME("failed for CLSID=%s\n", shdebugstr_guid(rclsid));
268 }
269
270 hres = IClassFactory_QueryInterface(pcf, iid, ppv);
271 IClassFactory_Release(pcf);
272
273 TRACE("-- pointer to class factory: %p\n",*ppv);
274 return hres;
275}
#define FIXME(fmt,...)
Definition: precomp.h:53
#define E_INVALIDARG
Definition: ddrawi.h:101
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:438
#define NULL
Definition: types.h:112
static IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
Definition: shellole.c:430
LPFNCREATEINSTANCE lpfnCI
Definition: shellole.c:61
REFIID clsid
Definition: shellole.c:60
static const struct @621 InterfaceTable[]
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
REFIID LPVOID * ppv
Definition: atlbase.h:39
HRESULT hres
Definition: protocol.c:465
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
#define TRACE(s)
Definition: solgame.cpp:4
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:3772

Referenced by SH32_CoCreateInstance().

◆ DragAcceptFiles()

void WINAPI DragAcceptFiles ( HWND  hWnd,
BOOL  b 
)

Definition at line 566 of file shellole.c.

567{
568 LONG exstyle;
569
570 if( !IsWindow(hWnd) ) return;
572 if (b)
573 exstyle |= WS_EX_ACCEPTFILES;
574 else
575 exstyle &= ~WS_EX_ACCEPTFILES;
577}
HWND hWnd
Definition: settings.c:17
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define WS_EX_ACCEPTFILES
Definition: pedump.c:648
long LONG
Definition: pedump.c:60
#define SetWindowLongPtrA
Definition: winuser.h:5456
BOOL WINAPI IsWindow(_In_opt_ HWND)
#define GetWindowLongPtrA
Definition: winuser.h:4930
#define GWL_EXSTYLE
Definition: winuser.h:862

Referenced by _tWinMain(), drop_window_therad(), MainWndProc(), NOTEPAD_WndProc(), OnCreate(), OnNcCreate(), and Preview_OnCreate().

◆ DragFinish()

void WINAPI DragFinish ( HDROP  h)

Definition at line 582 of file shellole.c.

583{
584 TRACE("\n");
585 GlobalFree(h);
586}
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611

Referenced by drop_window_proc(), LoadClipboardFromDrop(), MainWndDropFiles(), MainWndProc(), NOTEPAD_WndProc(), OnDropFiles(), CMainWindow::OnDropFiles(), Preview_OnDropFiles(), and WndProc().

◆ DragQueryFileA()

UINT WINAPI DragQueryFileA ( HDROP  hDrop,
UINT  lFile,
LPSTR  lpszFile,
UINT  lLength 
)

Definition at line 611 of file shellole.c.

616{
617 LPSTR lpDrop;
618 UINT i = 0;
619 DROPFILES *lpDropFileStruct = GlobalLock(hDrop);
620
621 TRACE("(%p, %x, %p, %u)\n", hDrop,lFile,lpszFile,lLength);
622
623 if(!lpDropFileStruct) goto end;
624
625 lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->pFiles;
626
627 if(lpDropFileStruct->fWide) {
628 LPWSTR lpszFileW = NULL;
629
630 if(lpszFile && lFile != 0xFFFFFFFF) {
631 lpszFileW = HeapAlloc(GetProcessHeap(), 0, lLength*sizeof(WCHAR));
632 if(lpszFileW == NULL) {
633 goto end;
634 }
635 }
636 i = DragQueryFileW(hDrop, lFile, lpszFileW, lLength);
637
638 if(lpszFileW) {
639 WideCharToMultiByte(CP_ACP, 0, lpszFileW, -1, lpszFile, lLength, 0, NULL);
640 HeapFree(GetProcessHeap(), 0, lpszFileW);
641 }
642 goto end;
643 }
644
645 while (i++ < lFile)
646 {
647 while (*lpDrop++); /* skip filename */
648 if (!*lpDrop)
649 {
650 i = (lFile == 0xFFFFFFFF) ? i : 0;
651 goto end;
652 }
653 }
654
655 i = strlen(lpDrop);
656 if (!lpszFile ) goto end; /* needed buffer size */
657 lstrcpynA (lpszFile, lpDrop, lLength);
658end:
659 GlobalUnlock(hDrop);
660 return i;
661}
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define lstrcpynA
Definition: compat.h:751
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:666
GLuint GLuint end
Definition: gl.h:1545
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
static ERESOURCE GlobalLock
Definition: sys_arch.c:8
unsigned int UINT
Definition: ndis.h:50
DWORD pFiles
Definition: shlobj.h:2313
BOOL fWide
Definition: shlobj.h:2316
__wchar_t WCHAR
Definition: xmlstorage.h:180
WCHAR * LPWSTR
Definition: xmlstorage.h:184
char * LPSTR
Definition: xmlstorage.h:182

Referenced by DragQueryFileW(), and drop_window_proc().

◆ DragQueryFileW()

UINT WINAPI DragQueryFileW ( HDROP  hDrop,
UINT  lFile,
LPWSTR  lpszwFile,
UINT  lLength 
)

Definition at line 666 of file shellole.c.

671{
672 LPWSTR lpwDrop;
673 UINT i = 0;
674 DROPFILES *lpDropFileStruct = GlobalLock(hDrop);
675
676 TRACE("(%p, %x, %p, %u)\n", hDrop,lFile,lpszwFile,lLength);
677
678 if(!lpDropFileStruct) goto end;
679
680 lpwDrop = (LPWSTR) ((LPSTR)lpDropFileStruct + lpDropFileStruct->pFiles);
681
682 if(lpDropFileStruct->fWide == FALSE) {
683 LPSTR lpszFileA = NULL;
684
685 if(lpszwFile && lFile != 0xFFFFFFFF) {
686 lpszFileA = HeapAlloc(GetProcessHeap(), 0, lLength);
687 if(lpszFileA == NULL) {
688 goto end;
689 }
690 }
691 i = DragQueryFileA(hDrop, lFile, lpszFileA, lLength);
692
693 if(lpszFileA) {
694 MultiByteToWideChar(CP_ACP, 0, lpszFileA, -1, lpszwFile, lLength);
695 HeapFree(GetProcessHeap(), 0, lpszFileA);
696 }
697 goto end;
698 }
699
700 i = 0;
701 while (i++ < lFile)
702 {
703 while (*lpwDrop++); /* skip filename */
704 if (!*lpwDrop)
705 {
706 i = (lFile == 0xFFFFFFFF) ? i : 0;
707 goto end;
708 }
709 }
710
711 i = strlenW(lpwDrop);
712 if ( !lpszwFile) goto end; /* needed buffer size */
713 lstrcpynW (lpszwFile, lpwDrop, lLength);
714end:
715 GlobalUnlock(hDrop);
716 return i;
717}
#define FALSE
Definition: types.h:117
#define MultiByteToWideChar
Definition: compat.h:110
#define lstrcpynW
Definition: compat.h:738
UINT WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength)
Definition: shellole.c:611
#define strlenW(s)
Definition: unicode.h:34

Referenced by CDrvDefExt::AddPages(), BtrfsPropSheet::apply_changes(), CFSDropTarget::DragEnter(), DragQueryFileA(), DragQueryFileWrapW(), CSendToZip::Drop(), CDrop::GetCount(), HDropFromClipboard(), CDrvDefExt::Initialize(), BtrfsContextMenu::Initialize(), BtrfsVolPropSheet::Initialize(), CShellLink::Initialize(), CFileDefExt::Initialize(), CZipFolder::Initialize(), CLayerUIPropPage::Initialize(), BtrfsContextMenu::InvokeCommand(), BtrfsPropSheet::load_file_list(), LoadClipboardFromDrop(), MainWndDropFiles(), OnDropFiles(), BtrfsPropSheet::open_as_admin(), Preview_OnDropFiles(), show_reflink_paste(), and WndProc().

◆ DragQueryPoint()

BOOL WINAPI DragQueryPoint ( HDROP  hDrop,
POINT p 
)

Definition at line 591 of file shellole.c.

592{
593 DROPFILES *lpDropFileStruct;
594 BOOL bRet;
595
596 TRACE("\n");
597
598 lpDropFileStruct = GlobalLock(hDrop);
599
600 *p = lpDropFileStruct->pt;
601 bRet = lpDropFileStruct->fNC;
602
603 GlobalUnlock(hDrop);
604 return bRet;
605}
unsigned int BOOL
Definition: ntddk_ex.h:94
GLfloat GLfloat p
Definition: glext.h:8902
BOOL fNC
Definition: shlobj.h:2315
POINT pt
Definition: shlobj.h:2314

Referenced by drop_window_proc().

◆ IDefClF_fnAddRef()

static ULONG WINAPI IDefClF_fnAddRef ( LPCLASSFACTORY  iface)
static

Definition at line 470 of file shellole.c.

471{
473 ULONG refCount = InterlockedIncrement(&This->ref);
474
475 TRACE("(%p)->(count=%u)\n", This, refCount - 1);
476
477 return refCount;
478}
#define InterlockedIncrement
Definition: armddk.h:53
static IDefClFImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: shellole.c:419
uint32_t ULONG
Definition: typedefs.h:59

◆ IDefClF_fnConstructor()

static IClassFactory * IDefClF_fnConstructor ( LPFNCREATEINSTANCE  lpfnCI,
PLONG  pcRefDll,
REFIID  riidInst 
)
static

Definition at line 430 of file shellole.c.

431{
432 IDefClFImpl* lpclf;
433
434 lpclf = HeapAlloc(GetProcessHeap(),0,sizeof(IDefClFImpl));
435 lpclf->ref = 1;
436 lpclf->IClassFactory_iface.lpVtbl = &dclfvt;
437 lpclf->lpfnCI = lpfnCI;
438 lpclf->pcRefDll = pcRefDll;
439
440 if (pcRefDll) InterlockedIncrement(pcRefDll);
441 lpclf->riidInst = riidInst;
442
443 TRACE("(%p)%s\n",lpclf, shdebugstr_guid(riidInst));
444 return (LPCLASSFACTORY)lpclf;
445}
IClassFactory IClassFactory_iface
Definition: shellole.c:411
LONG ref
Definition: shellole.c:412
const IID * riidInst
Definition: shell32.cpp:133
LONG * pcRefDll
Definition: shell32.cpp:134
LPFNCREATEINSTANCE lpfnCI
Definition: shell32.cpp:132
static const IClassFactoryVtbl dclfvt
Definition: shellole.c:424

Referenced by DllGetClassObject(), and SHCreateDefClassObject().

◆ IDefClF_fnCreateInstance()

static HRESULT WINAPI IDefClF_fnCreateInstance ( LPCLASSFACTORY  iface,
LPUNKNOWN  pUnkOuter,
REFIID  riid,
LPVOID ppvObject 
)
static

Definition at line 502 of file shellole.c.

504{
506
507 TRACE("%p->(%p,%s,%p)\n",This,pUnkOuter,shdebugstr_guid(riid),ppvObject);
508
509 *ppvObject = NULL;
510
511 if ( This->riidInst==NULL ||
512 IsEqualCLSID(riid, This->riidInst) ||
514 {
515 return This->lpfnCI(pUnkOuter, riid, ppvObject);
516 }
517
518 ERR("unknown IID requested %s\n",shdebugstr_guid(riid));
519 return E_NOINTERFACE;
520}
#define ERR(fmt,...)
Definition: precomp.h:57
const GUID IID_IUnknown
REFIID riid
Definition: atlbase.h:39
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96
#define E_NOINTERFACE
Definition: winerror.h:3479

◆ IDefClF_fnLockServer()

static HRESULT WINAPI IDefClF_fnLockServer ( LPCLASSFACTORY  iface,
BOOL  fLock 
)
static

Definition at line 524 of file shellole.c.

525{
527 TRACE("%p->(0x%x), not implemented\n",This, fLock);
528 return E_NOTIMPL;
529}
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ IDefClF_fnQueryInterface()

static HRESULT WINAPI IDefClF_fnQueryInterface ( LPCLASSFACTORY  iface,
REFIID  riid,
LPVOID ppvObj 
)
static

Definition at line 449 of file shellole.c.

451{
453
454 TRACE("(%p)->(%s)\n",This,shdebugstr_guid(riid));
455
456 *ppvObj = NULL;
457
459 *ppvObj = This;
461 return S_OK;
462 }
463
464 TRACE("-- E_NOINTERFACE\n");
465 return E_NOINTERFACE;
466}
const GUID IID_IClassFactory
#define S_OK
Definition: intsafe.h:52

◆ IDefClF_fnRelease()

static ULONG WINAPI IDefClF_fnRelease ( LPCLASSFACTORY  iface)
static

Definition at line 482 of file shellole.c.

483{
485 ULONG refCount = InterlockedDecrement(&This->ref);
486
487 TRACE("(%p)->(count=%u)\n", This, refCount + 1);
488
489 if (!refCount)
490 {
491 if (This->pcRefDll) InterlockedDecrement(This->pcRefDll);
492
493 TRACE("-- destroying IClassFactory(%p)\n",This);
495 return 0;
496 }
497 return refCount;
498}
#define InterlockedDecrement
Definition: armddk.h:52

◆ impl_from_IClassFactory()

static IDefClFImpl * impl_from_IClassFactory ( IClassFactory iface)
inlinestatic

Definition at line 419 of file shellole.c.

420{
421 return CONTAINING_RECORD(iface, IDefClFImpl, IClassFactory_iface);
422}
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260

Referenced by IDefClF_fnAddRef(), IDefClF_fnCreateInstance(), IDefClF_fnLockServer(), IDefClF_fnQueryInterface(), and IDefClF_fnRelease().

◆ SH32_CoCreateInstance()

HRESULT WINAPI SH32_CoCreateInstance ( LPCWSTR  aclsid,
const CLSID clsid,
LPUNKNOWN  pUnkOuter,
DWORD  dwClsCtx,
REFIID  refiid,
LPVOID ppv 
)

Definition at line 89 of file shellole.c.

96{
97 DWORD hres;
98 CLSID iid;
99 const CLSID * myclsid = clsid;
100 WCHAR sKeyName[MAX_PATH];
101 WCHAR sClassID[60];
102 WCHAR sDllPath[MAX_PATH];
103 HKEY hKey = 0;
105 IClassFactory * pcf = NULL;
106
107 if(!ppv) return E_POINTER;
108 *ppv=NULL;
109
110 /* if the clsid is a string, convert it */
111 if (!clsid)
112 {
113 if (!aclsid) return REGDB_E_CLASSNOTREG;
114 SHCLSIDFromStringW(aclsid, &iid);
115 myclsid = &iid;
116 }
117
118 TRACE("(%p,%s,unk:%p,%s,%p)\n",
119 aclsid,shdebugstr_guid(myclsid),pUnkOuter,shdebugstr_guid(refiid),ppv);
120
122 {
123 hres = IClassFactory_CreateInstance(pcf, pUnkOuter, refiid, ppv);
124 IClassFactory_Release(pcf);
125 goto end;
126 }
127
128 /* we look up the dll path in the registry */
129 SHStringFromGUIDW(myclsid, sClassID, ARRAY_SIZE(sClassID));
130 swprintf(sKeyName, L"CLSID\\%s\\InprocServer32", sClassID);
131
132 if (RegOpenKeyExW(HKEY_CLASSES_ROOT, sKeyName, 0, KEY_READ, &hKey))
133 return E_ACCESSDENIED;
134
135 /* if a special registry key is set, we load a shell extension without help of OLE32 */
136 if ((dwClsCtx & CLSCTX_INPROC_SERVER) && !SHQueryValueExW(hKey, L"LoadWithoutCOM", 0, 0, 0, 0))
137 {
138 /* load an external dll without ole32 */
142
143 dwSize = sizeof(sDllPath);
144 SHQueryValueExW(hKey, NULL, 0,0, sDllPath, &dwSize );
145
146 if ((hLibrary = LoadLibraryExW(sDllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH)) == 0) {
147 ERR("couldn't load InprocServer32 dll %s\n", debugstr_w(sDllPath));
149 goto end;
150 } else if (!(DllGetClassObject = (DllGetClassObjectFunc)GetProcAddress(hLibrary, "DllGetClassObject"))) {
151 ERR("couldn't find function DllGetClassObject in %s\n", debugstr_w(sDllPath));
154 goto end;
155 } else if (FAILED(hres = DllGetClassObject(myclsid, &IID_IClassFactory, (LPVOID*)&pcf))) {
156 TRACE("GetClassObject failed 0x%08x\n", hres);
157 goto end;
158 }
159
160 hres = IClassFactory_CreateInstance(pcf, pUnkOuter, refiid, ppv);
161 IClassFactory_Release(pcf);
162 } else {
163
164 /* load an external dll in the usual way */
165 hres = CoCreateInstance(myclsid, pUnkOuter, dwClsCtx, refiid, ppv);
166 }
167
168end:
169 if (hKey) RegCloseKey(hKey);
170 if(hres!=S_OK)
171 {
172 ERR("failed (0x%08x) to create CLSID:%s IID:%s\n",
173 hres, shdebugstr_guid(myclsid), shdebugstr_guid(refiid));
174 ERR("class not found in registry\n");
175 }
176
177 TRACE("-- instance: %p\n",*ppv);
178 return hres;
179}
#define ARRAY_SIZE(A)
Definition: main.h:20
#define RegCloseKey(hKey)
Definition: registry.h:49
HMODULE hLibrary
Definition: odbccp32.c:12
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3333
#define GetProcAddress(x, y)
Definition: compat.h:753
#define FreeLibrary(x)
Definition: compat.h:748
#define MAX_PATH
Definition: compat.h:34
#define CALLBACK
Definition: compat.h:35
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
HRESULT(CALLBACK * DllGetClassObjectFunc)(REFCLSID clsid, REFIID iid, LPVOID *ppv)
Definition: compobj.c:449
INT WINAPI SHStringFromGUIDW(REFGUID guid, LPWSTR lpszDest, INT cchMax)
Definition: ordinal.c:661
DWORD WINAPI SHCLSIDFromStringW(LPCWSTR clsid, CLSID *id)
Definition: shellole.c:300
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
Definition: shellole.c:245
DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue, LPDWORD lpReserved, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1461
#define swprintf
Definition: precomp.h:40
#define L(x)
Definition: resources.c:13
unsigned long DWORD
Definition: ntddk_ex.h:95
FxAutoRegKey hKey
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
#define debugstr_w
Definition: kernel32.h:32
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
#define KEY_READ
Definition: nt_native.h:1026
#define REFIID
Definition: guiddef.h:118
#define REFCLSID
Definition: guiddef.h:117
#define LOAD_WITH_ALTERED_SEARCH_PATH
Definition: winbase.h:340
#define HRESULT
Definition: msvc.h:7
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:3801
#define E_ACCESSDENIED
Definition: winerror.h:4116
#define E_POINTER
Definition: winerror.h:3480
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10

Referenced by SH32_ExtCoCreateInstance(), and SHCoCreateInstance().

◆ SH32_ExtCoCreateInstance()

HRESULT WINAPI SH32_ExtCoCreateInstance ( _In_opt_ LPCWSTR  aclsid,
_In_opt_ const CLSID clsid,
_In_opt_ LPUNKNOWN  pUnkOuter,
_In_ DWORD  dwClsCtx,
_In_ REFIID  riid,
_Out_ LPVOID ppv 
)

Definition at line 207 of file shellole.c.

214{
215 // TODO: Verify that this CLSID is allowed (..\CurrentVersion\Shell Extensions\Approved) if REST_ENFORCESHELLEXTSECURITY is active
216 return SH32_CoCreateInstance(aclsid, clsid, pUnkOuter, dwClsCtx, riid, ppv);
217}
HRESULT WINAPI SH32_CoCreateInstance(LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, DWORD dwClsCtx, REFIID refiid, LPVOID *ppv)
Definition: shellole.c:89

Referenced by SHExtCoCreateInstance(), and SHSimulateDropOnClsid().

◆ SHAlloc()

◆ SHCLSIDFromStringA()

DWORD WINAPI SHCLSIDFromStringA ( LPCSTR  clsid,
CLSID id 
)

Definition at line 292 of file shellole.c.

293{
294 WCHAR buffer[40];
295 TRACE("(%p(%s) %p)\n", clsid, clsid, id);
296 if (!MultiByteToWideChar( CP_ACP, 0, clsid, -1, buffer, sizeof(buffer)/sizeof(WCHAR) ))
297 return CO_E_CLASSSTRING;
298 return CLSIDFromString( buffer, id );
299}
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
GLuint buffer
Definition: glext.h:5915
#define CO_E_CLASSSTRING
Definition: winerror.h:3919

Referenced by _ILCreateGuidFromStrA(), and SHCLSIDFromStringAW().

◆ SHCLSIDFromStringAW()

DWORD WINAPI SHCLSIDFromStringAW ( LPCVOID  clsid,
CLSID id 
)

Definition at line 305 of file shellole.c.

306{
307 if (SHELL_OsIsUnicode())
308 return SHCLSIDFromStringW (clsid, id);
309 return SHCLSIDFromStringA (clsid, id);
310}
DWORD WINAPI SHCLSIDFromStringA(LPCSTR clsid, CLSID *id)
Definition: shellole.c:292
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:174

◆ SHCLSIDFromStringW()

DWORD WINAPI SHCLSIDFromStringW ( LPCWSTR  clsid,
CLSID id 
)

◆ SHCoCreateInstance()

◆ SHCreateDefClassObject()

HRESULT WINAPI SHCreateDefClassObject ( REFIID  riid,
LPVOID ppv,
LPFNCREATEINSTANCE  lpfnCI,
LPDWORD  pcRefDll,
REFIID  riidInst 
)

Definition at line 543 of file shellole.c.

549{
550 IClassFactory * pcf;
551
552 TRACE("%s %p %p %p %s\n",
553 shdebugstr_guid(riid), ppv, lpfnCI, pcRefDll, shdebugstr_guid(riidInst));
554
556 if (! (pcf = IDefClF_fnConstructor(lpfnCI, (PLONG)pcRefDll, riidInst))) return E_OUTOFMEMORY;
557 *ppv = pcf;
558 return S_OK;
559}
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
int32_t * PLONG
Definition: typedefs.h:58

◆ SHCreateQueryCancelAutoPlayMoniker()

HRESULT WINAPI SHCreateQueryCancelAutoPlayMoniker ( IMoniker **  moniker)

Definition at line 850 of file shellole.c.

851{
852 TRACE("%p\n", moniker);
853
854 if (!moniker) return E_INVALIDARG;
855 return CreateClassMoniker(&CLSID_QueryCancelAutoPlay, moniker);
856}
HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, IMoniker **ppmk)
Definition: classmoniker.c:701
Definition: main.c:40

◆ SHExtCoCreateInstance()

HRESULT WINAPI SHExtCoCreateInstance ( _In_opt_ LPCWSTR  aclsid,
_In_opt_ const CLSID clsid,
_In_opt_ LPUNKNOWN  pUnkOuter,
_In_ REFIID  riid,
_Out_ LPVOID ppv 
)

Definition at line 222 of file shellole.c.

228{
229 return SH32_ExtCoCreateInstance(aclsid, clsid, pUnkOuter, CLSCTX_INPROC_SERVER, riid, ppv);
230}
HRESULT WINAPI SH32_ExtCoCreateInstance(_In_opt_ LPCWSTR aclsid, _In_opt_ const CLSID *clsid, _In_opt_ LPUNKNOWN pUnkOuter, _In_ DWORD dwClsCtx, _In_ REFIID riid, _Out_ LPVOID *ppv)
Definition: shellole.c:207

Referenced by DCMA_InsertMenuItems(), InvokeShellExecuteHook(), and SHELL_InitializeExtension().

◆ SHFree()

void WINAPI SHFree ( LPVOID  pv)

Definition at line 370 of file shellole.c.

371{
372 TRACE("%p\n",pv);
373 CoTaskMemFree(pv);
374}
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442

Referenced by _DestroyCallback(), CFSDropTarget::_DoDrop(), _ILCreateControlPanel(), _ILCreatePrinters(), _ILFreeaPidl(), CFSDropTarget::_RepositionItems(), _tmain(), CCabFolder::CompareID(), CRecycleBin::CompareIDs(), CreateCplAbsoluteParsingPath(), CPrintersEnum::CreatePrintersEnumList(), CreateShellItemFromParse(), CEnumIDListBase::DeleteList(), CChangeNotifyServer::DestroyItem(), CDefaultContextMenu::DoCreateNewFolder(), CEnumIDList::DPADestroyCallback(), DrivesContextMenuCallback(), EnableCommandIfVerbExistsProc(), EnumFillCallback(), ExtractFilesCallback(), FileMenu_DeleteAllItems(), FileMenu_Destroy(), CDefView::fill_list(), CDefView::FillList(), FindExecutableA(), FM_SetMenuParameter(), FNFDINOTIFY(), FNFREE(), FolderOptionsFileTypesDlg(), Free(), ShellPropSheetDialog::FreeData(), FreeRecycleBinString(), FreeStrRet(), COpenControlPanel::GetPath(), CDefView::GetSelections(), GetUIObjectOfPath(), ILAppendID(), ILFree(), ILLoadFromStream(), CNetworkConnections::Initialize(), CControlPanelFolder::Initialize(), CFSFolder::Initialize(), CMyDocsFolder::Initialize(), CNetFolder::Initialize(), CPrinterFolder::Initialize(), CRecycleBin::Initialize(), CFileDefExt::InitMultifilePageThread(), CSearchBar::Invoke(), CCPLItemMenu::InvokeCommand(), CDefView::LV_RenameItem(), CDefView::OnDestroy(), CSearchBar::OnLocationEditChange(), CDefView::OnNotify(), OpenAs_RunDLLA(), PathEnvSubstIsDirectory(), PathResolveA(), r_verify_pidl(), ReadAndDumpString(), RegFolderContextMenuCallback(), RenderFILENAMEA(), RenderFILENAMEW(), CNewMenu::SelectNewItem(), CFindFolder::SetNameOf(), SHBindToParent(), SHELL32_GetFSItemAttributes(), SHELL_CreatePropSheetStubWindow(), SHELL_SingleFileOperation(), ShellExecCmdLine(), ShellExecuteExA(), SHGetFileInfoW(), SHGFI(), sic_free(), SIC_IconAppend(), CFindFolder::StartSearch(), StartWithCommandLine(), test_printers_folder(), Unknown_Release(), CFileDefExt::WalkDirTree(), wmain(), WOWShellExecute(), CAdminToolsFolder::~CAdminToolsFolder(), CControlPanelFolder::~CControlPanelFolder(), CDefView::~CDefView(), CDrivesFolder::~CDrivesFolder(), CFontsFolder::~CFontsFolder(), CFSDropTarget::~CFSDropTarget(), CFSFolder::~CFSFolder(), CMyDocsFolder::~CMyDocsFolder(), CNetFolder::~CNetFolder(), CNetworkConnections::~CNetworkConnections(), CPrinterFolder::~CPrinterFolder(), CRecycleBin::~CRecycleBin(), CZZWStr::~CZZWStr(), RecycleBin5Enum::~RecycleBin5Enum(), and RecycleBin5File::~RecycleBin5File().

◆ SHGetDesktopFolder()

HRESULT WINAPI SHGetDesktopFolder ( IShellFolder **  psf)

Definition at line 380 of file shellole.c.

381{
383
384 TRACE("(%p)\n", psf);
385
386 if(!psf) return E_INVALIDARG;
387
388 *psf = NULL;
389 hres = ISF_Desktop_Constructor(NULL, &IID_IShellFolder, (LPVOID*)psf);
390
391 TRACE("-- %p->(%p) 0x%08x\n", psf, *psf, hres);
392 return hres;
393}

◆ SHGetMalloc()

HRESULT WINAPI SHGetMalloc ( LPMALLOC lpmal)

Definition at line 329 of file shellole.c.

330{
331 TRACE("(%p)\n", lpmal);
332 return CoGetMalloc(MEMCTX_TASK, lpmal);
333}
HRESULT WINAPI CoGetMalloc(DWORD context, IMalloc **imalloc)
Definition: ifs.c:403

Referenced by check_lnk_(), CHSourceDlgProc(), create_lnk_(), CommonShellMalloc::init(), init_function_pointers(), loadShell32(), and SHAddToRecentDocs().

◆ SHPropStgCreate()

HRESULT WINAPI SHPropStgCreate ( IPropertySetStorage psstg,
REFFMTID  fmtid,
const CLSID pclsid,
DWORD  grfFlags,
DWORD  grfMode,
DWORD  dwDisposition,
IPropertyStorage **  ppstg,
UINT puCodePage 
)

Definition at line 722 of file shellole.c.

725{
726 PROPSPEC prop;
727 PROPVARIANT ret;
729
730 TRACE("%p %s %s %x %x %x %p %p\n", psstg, debugstr_guid(fmtid), debugstr_guid(pclsid),
731 grfFlags, grfMode, dwDisposition, ppstg, puCodePage);
732
733 hres = IPropertySetStorage_Open(psstg, fmtid, grfMode, ppstg);
734
735 switch(dwDisposition) {
736 case CREATE_ALWAYS:
737 if(SUCCEEDED(hres)) {
738 IPropertyStorage_Release(*ppstg);
739 hres = IPropertySetStorage_Delete(psstg, fmtid);
740 if(FAILED(hres))
741 return hres;
742 hres = E_FAIL;
743 }
744
745 case OPEN_ALWAYS:
746 case CREATE_NEW:
747 if(FAILED(hres))
748 hres = IPropertySetStorage_Create(psstg, fmtid, pclsid,
749 grfFlags, grfMode, ppstg);
750
751 case OPEN_EXISTING:
752 if(FAILED(hres))
753 return hres;
754
755 if(puCodePage) {
756 prop.ulKind = PRSPEC_PROPID;
757 prop.u.propid = PID_CODEPAGE;
758 hres = IPropertyStorage_ReadMultiple(*ppstg, 1, &prop, &ret);
759 if(FAILED(hres) || ret.vt!=VT_I2)
760 *puCodePage = 0;
761 else
762 *puCodePage = ret.u.iVal;
763 }
764 }
765
766 return S_OK;
767}
#define E_FAIL
Definition: ddrawi.h:102
#define OPEN_EXISTING
Definition: compat.h:775
@ VT_I2
Definition: compat.h:2297
#define debugstr_guid
Definition: kernel32.h:35
#define CREATE_ALWAYS
Definition: disk.h:72
#define CREATE_NEW
Definition: disk.h:69
#define OPEN_ALWAYS
Definition: disk.h:70
#define PID_CODEPAGE
Definition: suminfo.c:43

◆ SHPropStgReadMultiple()

HRESULT WINAPI SHPropStgReadMultiple ( IPropertyStorage pps,
UINT  uCodePage,
ULONG  cpspec,
const PROPSPEC *  rgpspec,
PROPVARIANT *  rgvar 
)

Definition at line 772 of file shellole.c.

774{
775 STATPROPSETSTG stat;
777
778 FIXME("%p %u %u %p %p\n", pps, uCodePage, cpspec, rgpspec, rgvar);
779
780 memset(rgvar, 0, cpspec*sizeof(PROPVARIANT));
781 hres = IPropertyStorage_ReadMultiple(pps, cpspec, rgpspec, rgvar);
782 if(FAILED(hres))
783 return hres;
784
785 if(!uCodePage) {
786 PROPSPEC prop;
787 PROPVARIANT ret;
788
789 prop.ulKind = PRSPEC_PROPID;
790 prop.u.propid = PID_CODEPAGE;
791 hres = IPropertyStorage_ReadMultiple(pps, 1, &prop, &ret);
792 if(FAILED(hres) || ret.vt!=VT_I2)
793 return S_OK;
794
795 uCodePage = ret.u.iVal;
796 }
797
798 hres = IPropertyStorage_Stat(pps, &stat);
799 if(FAILED(hres))
800 return S_OK;
801
802 /* TODO: do something with codepage and stat */
803 return S_OK;
804}
#define stat
Definition: acwin.h:99
#define memset(x, y, z)
Definition: compat.h:39
Definition: stat.h:55

◆ SHPropStgWriteMultiple()

HRESULT WINAPI SHPropStgWriteMultiple ( IPropertyStorage pps,
UINT uCodePage,
ULONG  cpspec,
const PROPSPEC *  rgpspec,
PROPVARIANT *  rgvar,
PROPID  propidNameFirst 
)

Definition at line 809 of file shellole.c.

811{
812 STATPROPSETSTG stat;
815
816 FIXME("%p %p %u %p %p %d\n", pps, uCodePage, cpspec, rgpspec, rgvar, propidNameFirst);
817
818 hres = IPropertyStorage_Stat(pps, &stat);
819 if(FAILED(hres))
820 return hres;
821
822 if(uCodePage && *uCodePage)
823 codepage = *uCodePage;
824 else {
825 PROPSPEC prop;
826 PROPVARIANT ret;
827
828 prop.ulKind = PRSPEC_PROPID;
829 prop.u.propid = PID_CODEPAGE;
830 hres = IPropertyStorage_ReadMultiple(pps, 1, &prop, &ret);
831 if(FAILED(hres))
832 return hres;
833 if(ret.vt!=VT_I2 || !ret.u.iVal)
834 return E_FAIL;
835
836 codepage = ret.u.iVal;
837 if(uCodePage)
838 *uCodePage = codepage;
839 }
840
841 /* TODO: do something with codepage and stat */
842
843 hres = IPropertyStorage_WriteMultiple(pps, cpspec, rgpspec, rgvar, propidNameFirst);
844 return hres;
845}
int codepage
Definition: win_iconv.c:156

◆ SHStringFromGUIDW()

INT WINAPI SHStringFromGUIDW ( REFGUID  guid,
LPWSTR  lpszDest,
INT  cchMax 
)

Definition at line 661 of file ordinal.c.

662{
663 WCHAR xguid[40];
664 INT iLen;
665 static const WCHAR wszFormat[] = {'{','%','0','8','l','X','-','%','0','4','X','-','%','0','4','X','-',
666 '%','0','2','X','%','0','2','X','-','%','0','2','X','%','0','2','X','%','0','2','X','%','0','2',
667 'X','%','0','2','X','%','0','2','X','}',0};
668
669 TRACE("(%s,%p,%d)\n", debugstr_guid(guid), lpszDest, cchMax);
670
671 sprintfW(xguid, wszFormat, guid->Data1, guid->Data2, guid->Data3,
672 guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
673 guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
674
675 iLen = strlenW(xguid) + 1;
676
677 if (iLen > cchMax)
678 return 0;
679 memcpy(lpszDest, xguid, iLen*sizeof(WCHAR));
680 return iLen;
681}
UINT cchMax
WCHAR lpszDest[260]
GUID guid
Definition: version.c:147
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
int32_t INT
Definition: typedefs.h:58
#define sprintfW
Definition: unicode.h:64

Referenced by SH32_CoCreateInstance().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ clsid

◆ dclfvt

static const IClassFactoryVtbl dclfvt
static
Initial value:
=
{
}
static HRESULT WINAPI IDefClF_fnLockServer(LPCLASSFACTORY iface, BOOL fLock)
Definition: shellole.c:524
static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
Definition: shellole.c:482
static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
Definition: shellole.c:470
static HRESULT WINAPI IDefClF_fnQueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj)
Definition: shellole.c:449
static HRESULT WINAPI IDefClF_fnCreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: shellole.c:502

Definition at line 424 of file shellole.c.

Referenced by IDefClF_fnConstructor().

◆ 

const struct { ... } InterfaceTable[]
Initial value:
= {
{&CLSID_ApplicationAssociationRegistration, ApplicationAssociationRegistration_Constructor},
{&CLSID_AutoComplete, IAutoComplete_Constructor},
{&CLSID_ControlPanel, IControlPanel_Constructor},
{&CLSID_DragDropHelper, IDropTargetHelper_Constructor},
{&CLSID_FolderShortcut, FolderShortcut_Constructor},
{&CLSID_MyComputer, ISF_MyComputer_Constructor},
{&CLSID_MyDocuments, MyDocuments_Constructor},
{&CLSID_NetworkPlaces, ISF_NetworkPlaces_Constructor},
{&CLSID_Printers, Printers_Constructor},
{&CLSID_QueryAssociations, QueryAssociations_Constructor},
{&CLSID_RecycleBin, RecycleBin_Constructor},
{&CLSID_ShellDesktop, ISF_Desktop_Constructor},
{&CLSID_ShellFSFolder, IFSFolder_Constructor},
{&CLSID_ShellItem, IShellItem_Constructor},
{&CLSID_ShellLink, IShellLink_Constructor},
{&CLSID_UnixDosFolder, UnixDosFolder_Constructor},
{&CLSID_UnixFolder, UnixFolder_Constructor},
{&CLSID_ExplorerBrowser,ExplorerBrowser_Constructor},
{&CLSID_KnownFolderManager, KnownFolderManager_Constructor},
{&CLSID_Shell, IShellDispatch_Constructor},
}
const GUID CLSID_UnixDosFolder
const GUID CLSID_UnixFolder

Referenced by DllGetClassObject().

◆ lpfnCI