ReactOS  0.4.15-dev-4869-g35a816a
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 SHCoCreateInstance (LPCWSTR aclsid, const CLSID *clsid, LPUNKNOWN pUnkOuter, REFIID refiid, 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 201 of file shellole.c.

202 {
203  IClassFactory * pcf = NULL;
204  HRESULT hres;
205  int i;
206 
207  TRACE("CLSID:%s,IID:%s\n",shdebugstr_guid(rclsid),shdebugstr_guid(iid));
208 
209  if (!ppv) return E_INVALIDARG;
210  *ppv = NULL;
211 
212  /* search our internal interface table */
213  for(i=0;InterfaceTable[i].clsid;i++) {
214  if(IsEqualIID(InterfaceTable[i].clsid, rclsid)) {
215  TRACE("index[%u]\n", i);
217  break;
218  }
219  }
220 
221  if (!pcf) {
222  FIXME("failed for CLSID=%s\n", shdebugstr_guid(rclsid));
224  }
225 
226  hres = IClassFactory_QueryInterface(pcf, iid, ppv);
227  IClassFactory_Release(pcf);
228 
229  TRACE("-- pointer to class factory: %p\n",*ppv);
230  return hres;
231 }
REFIID LPVOID * ppv
Definition: atlbase.h:39
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
LPFNCREATEINSTANCE lpfnCI
Definition: shellole.c:61
#define CLASS_E_CLASSNOTAVAILABLE
Definition: winerror.h:2663
REFIID clsid
Definition: shellole.c:60
#define FIXME(fmt,...)
Definition: debug.h:111
#define E_INVALIDARG
Definition: ddrawi.h:101
static IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
Definition: shellole.c:386
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
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
#define NULL
Definition: types.h:112
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95
static const struct @540 InterfaceTable[]

Referenced by SHCoCreateInstance().

◆ DragAcceptFiles()

void WINAPI DragAcceptFiles ( HWND  hWnd,
BOOL  b 
)

Definition at line 522 of file shellole.c.

523 {
524  LONG exstyle;
525 
526  if( !IsWindow(hWnd) ) return;
528  if (b)
529  exstyle |= WS_EX_ACCEPTFILES;
530  else
531  exstyle &= ~WS_EX_ACCEPTFILES;
533 }
BOOL WINAPI IsWindow(_In_opt_ HWND)
HWND hWnd
Definition: settings.c:17
#define GWL_EXSTYLE
Definition: winuser.h:845
long LONG
Definition: pedump.c:60
#define GetWindowLongPtrA
Definition: winuser.h:4808
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define SetWindowLongPtrA
Definition: winuser.h:5325
#define WS_EX_ACCEPTFILES
Definition: pedump.c:648

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

◆ DragFinish()

void WINAPI DragFinish ( HDROP  h)

Definition at line 538 of file shellole.c.

539 {
540  TRACE("\n");
541  GlobalFree(h);
542 }
GLfloat GLfloat GLfloat GLfloat h
Definition: glext.h:7723
#define TRACE(s)
Definition: solgame.cpp:4
HGLOBAL NTAPI GlobalFree(HGLOBAL hMem)
Definition: heapmem.c:611

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

◆ DragQueryFileA()

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

Definition at line 567 of file shellole.c.

572 {
573  LPSTR lpDrop;
574  UINT i = 0;
575  DROPFILES *lpDropFileStruct = GlobalLock(hDrop);
576 
577  TRACE("(%p, %x, %p, %u)\n", hDrop,lFile,lpszFile,lLength);
578 
579  if(!lpDropFileStruct) goto end;
580 
581  lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->pFiles;
582 
583  if(lpDropFileStruct->fWide) {
584  LPWSTR lpszFileW = NULL;
585 
586  if(lpszFile && lFile != 0xFFFFFFFF) {
587  lpszFileW = HeapAlloc(GetProcessHeap(), 0, lLength*sizeof(WCHAR));
588  if(lpszFileW == NULL) {
589  goto end;
590  }
591  }
592  i = DragQueryFileW(hDrop, lFile, lpszFileW, lLength);
593 
594  if(lpszFileW) {
595  WideCharToMultiByte(CP_ACP, 0, lpszFileW, -1, lpszFile, lLength, 0, NULL);
596  HeapFree(GetProcessHeap(), 0, lpszFileW);
597  }
598  goto end;
599  }
600 
601  while (i++ < lFile)
602  {
603  while (*lpDrop++); /* skip filename */
604  if (!*lpDrop)
605  {
606  i = (lFile == 0xFFFFFFFF) ? i : 0;
607  goto end;
608  }
609  }
610 
611  i = strlen(lpDrop);
612  if (!lpszFile ) goto end; /* needed buffer size */
613  lstrcpynA (lpszFile, lpDrop, lLength);
614 end:
615  GlobalUnlock(hDrop);
616  return i;
617 }
#define WideCharToMultiByte
Definition: compat.h:111
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define CP_ACP
Definition: compat.h:109
char * LPSTR
Definition: xmlstorage.h:182
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
__wchar_t WCHAR
Definition: xmlstorage.h:180
BOOL fWide
Definition: shlobj.h:2149
GLuint GLuint end
Definition: gl.h:1545
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
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
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
#define lstrcpynA
Definition: compat.h:610
WCHAR * LPWSTR
Definition: xmlstorage.h:184
DWORD pFiles
Definition: shlobj.h:2146
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile, UINT lLength)
Definition: shellole.c:622
#define HeapFree(x, y, z)
Definition: compat.h:594

Referenced by DragQueryFileW(), and drop_window_proc().

◆ DragQueryFileW()

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

Definition at line 622 of file shellole.c.

627 {
628  LPWSTR lpwDrop;
629  UINT i = 0;
630  DROPFILES *lpDropFileStruct = GlobalLock(hDrop);
631 
632  TRACE("(%p, %x, %p, %u)\n", hDrop,lFile,lpszwFile,lLength);
633 
634  if(!lpDropFileStruct) goto end;
635 
636  lpwDrop = (LPWSTR) ((LPSTR)lpDropFileStruct + lpDropFileStruct->pFiles);
637 
638  if(lpDropFileStruct->fWide == FALSE) {
639  LPSTR lpszFileA = NULL;
640 
641  if(lpszwFile && lFile != 0xFFFFFFFF) {
642  lpszFileA = HeapAlloc(GetProcessHeap(), 0, lLength);
643  if(lpszFileA == NULL) {
644  goto end;
645  }
646  }
647  i = DragQueryFileA(hDrop, lFile, lpszFileA, lLength);
648 
649  if(lpszFileA) {
650  MultiByteToWideChar(CP_ACP, 0, lpszFileA, -1, lpszwFile, lLength);
651  HeapFree(GetProcessHeap(), 0, lpszFileA);
652  }
653  goto end;
654  }
655 
656  i = 0;
657  while (i++ < lFile)
658  {
659  while (*lpwDrop++); /* skip filename */
660  if (!*lpwDrop)
661  {
662  i = (lFile == 0xFFFFFFFF) ? i : 0;
663  goto end;
664  }
665  }
666 
667  i = strlenW(lpwDrop);
668  if ( !lpszwFile) goto end; /* needed buffer size */
669  lstrcpynW (lpszwFile, lpwDrop, lLength);
670 end:
671  GlobalUnlock(hDrop);
672  return i;
673 }
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
#define CP_ACP
Definition: compat.h:109
char * LPSTR
Definition: xmlstorage.h:182
#define lstrcpynW
Definition: compat.h:597
#define FALSE
Definition: types.h:117
UINT WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile, UINT lLength)
Definition: shellole.c:567
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL fWide
Definition: shlobj.h:2149
GLuint GLuint end
Definition: gl.h:1545
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
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
unsigned int UINT
Definition: ndis.h:50
#define NULL
Definition: types.h:112
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
#define MultiByteToWideChar
Definition: compat.h:110
WCHAR * LPWSTR
Definition: xmlstorage.h:184
DWORD pFiles
Definition: shlobj.h:2146
#define HeapFree(x, y, z)
Definition: compat.h:594

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

◆ DragQueryPoint()

BOOL WINAPI DragQueryPoint ( HDROP  hDrop,
POINT p 
)

Definition at line 547 of file shellole.c.

548 {
549  DROPFILES *lpDropFileStruct;
550  BOOL bRet;
551 
552  TRACE("\n");
553 
554  lpDropFileStruct = GlobalLock(hDrop);
555 
556  *p = lpDropFileStruct->pt;
557  bRet = lpDropFileStruct->fNC;
558 
559  GlobalUnlock(hDrop);
560  return bRet;
561 }
POINT pt
Definition: shlobj.h:2147
unsigned int BOOL
Definition: ntddk_ex.h:94
BOOL fNC
Definition: shlobj.h:2148
#define TRACE(s)
Definition: solgame.cpp:4
LPVOID NTAPI GlobalLock(HGLOBAL hMem)
Definition: heapmem.c:755
BOOL NTAPI GlobalUnlock(HGLOBAL hMem)
Definition: heapmem.c:1190
GLfloat GLfloat p
Definition: glext.h:8902

Referenced by drop_window_proc().

◆ IDefClF_fnAddRef()

static ULONG WINAPI IDefClF_fnAddRef ( LPCLASSFACTORY  iface)
static

Definition at line 426 of file shellole.c.

427 {
429  ULONG refCount = InterlockedIncrement(&This->ref);
430 
431  TRACE("(%p)->(count=%u)\n", This, refCount - 1);
432 
433  return refCount;
434 }
static IDefClFImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: shellole.c:375
#define TRACE(s)
Definition: solgame.cpp:4
#define InterlockedIncrement
Definition: armddk.h:53
unsigned int ULONG
Definition: retypes.h:1

◆ IDefClF_fnConstructor()

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

Definition at line 386 of file shellole.c.

387 {
388  IDefClFImpl* lpclf;
389 
390  lpclf = HeapAlloc(GetProcessHeap(),0,sizeof(IDefClFImpl));
391  lpclf->ref = 1;
392  lpclf->IClassFactory_iface.lpVtbl = &dclfvt;
393  lpclf->lpfnCI = lpfnCI;
394  lpclf->pcRefDll = pcRefDll;
395 
396  if (pcRefDll) InterlockedIncrement(pcRefDll);
397  lpclf->riidInst = riidInst;
398 
399  TRACE("(%p)%s\n",lpclf, shdebugstr_guid(riidInst));
400  return (LPCLASSFACTORY)lpclf;
401 }
IClassFactory IClassFactory_iface
Definition: shellole.c:367
static const IClassFactoryVtbl dclfvt
Definition: shellole.c:380
LONG * pcRefDll
Definition: shell32.cpp:134
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
LPFNCREATEINSTANCE lpfnCI
Definition: shellole.c:61
LONG ref
Definition: shellole.c:368
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
const IID * riidInst
Definition: shell32.cpp:133
#define InterlockedIncrement
Definition: armddk.h:53
LPFNCREATEINSTANCE lpfnCI
Definition: shell32.cpp:132

Referenced by DllGetClassObject(), and SHCreateDefClassObject().

◆ IDefClF_fnCreateInstance()

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

Definition at line 458 of file shellole.c.

460 {
462 
463  TRACE("%p->(%p,%s,%p)\n",This,pUnkOuter,shdebugstr_guid(riid),ppvObject);
464 
465  *ppvObject = NULL;
466 
467  if ( This->riidInst==NULL ||
468  IsEqualCLSID(riid, This->riidInst) ||
470  {
471  return This->lpfnCI(pUnkOuter, riid, ppvObject);
472  }
473 
474  ERR("unknown IID requested %s\n",shdebugstr_guid(riid));
475  return E_NOINTERFACE;
476 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
static IDefClFImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: shellole.c:375
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
REFIID LPVOID * ppvObject
Definition: precomp.h:44
#define ERR(fmt,...)
Definition: debug.h:110
#define NULL
Definition: types.h:112
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96

◆ IDefClF_fnLockServer()

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

Definition at line 480 of file shellole.c.

481 {
483  TRACE("%p->(0x%x), not implemented\n",This, fLock);
484  return E_NOTIMPL;
485 }
static IDefClFImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: shellole.c:375
#define TRACE(s)
Definition: solgame.cpp:4
#define E_NOTIMPL
Definition: ddrawi.h:99

◆ IDefClF_fnQueryInterface()

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

Definition at line 405 of file shellole.c.

407 {
409 
410  TRACE("(%p)->(%s)\n",This,shdebugstr_guid(riid));
411 
412  *ppvObj = NULL;
413 
415  *ppvObj = This;
416  InterlockedIncrement(&This->ref);
417  return S_OK;
418  }
419 
420  TRACE("-- E_NOINTERFACE\n");
421  return E_NOINTERFACE;
422 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
static IDefClFImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: shellole.c:375
#define TRACE(s)
Definition: solgame.cpp:4
const GUID IID_IUnknown
#define S_OK
Definition: intsafe.h:52
#define InterlockedIncrement
Definition: armddk.h:53
#define NULL
Definition: types.h:112
const GUID IID_IClassFactory
#define IsEqualIID(riid1, riid2)
Definition: guiddef.h:95

◆ IDefClF_fnRelease()

static ULONG WINAPI IDefClF_fnRelease ( LPCLASSFACTORY  iface)
static

Definition at line 438 of file shellole.c.

439 {
441  ULONG refCount = InterlockedDecrement(&This->ref);
442 
443  TRACE("(%p)->(count=%u)\n", This, refCount + 1);
444 
445  if (!refCount)
446  {
447  if (This->pcRefDll) InterlockedDecrement(This->pcRefDll);
448 
449  TRACE("-- destroying IClassFactory(%p)\n",This);
451  return 0;
452  }
453  return refCount;
454 }
static IDefClFImpl * impl_from_IClassFactory(IClassFactory *iface)
Definition: shellole.c:375
#define TRACE(s)
Definition: solgame.cpp:4
#define GetProcessHeap()
Definition: compat.h:595
#define InterlockedDecrement
Definition: armddk.h:52
unsigned int ULONG
Definition: retypes.h:1
#define HeapFree(x, y, z)
Definition: compat.h:594

◆ impl_from_IClassFactory()

static IDefClFImpl* impl_from_IClassFactory ( IClassFactory iface)
inlinestatic

Definition at line 375 of file shellole.c.

376 {
377  return CONTAINING_RECORD(iface, IDefClFImpl, IClassFactory_iface);
378 }
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560

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

◆ SHAlloc()

◆ SHCLSIDFromStringA()

DWORD WINAPI SHCLSIDFromStringA ( LPCSTR  clsid,
CLSID id 
)

Definition at line 248 of file shellole.c.

249 {
250  WCHAR buffer[40];
251  TRACE("(%p(%s) %p)\n", clsid, clsid, id);
252  if (!MultiByteToWideChar( CP_ACP, 0, clsid, -1, buffer, sizeof(buffer)/sizeof(WCHAR) ))
253  return CO_E_CLASSSTRING;
254  return CLSIDFromString( buffer, id );
255 }
#define CP_ACP
Definition: compat.h:109
GLuint buffer
Definition: glext.h:5915
REFIID clsid
Definition: shellole.c:60
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MultiByteToWideChar
Definition: compat.h:110
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338
#define CO_E_CLASSSTRING
Definition: winerror.h:2806

Referenced by _ILCreateGuidFromStrA(), and SHCLSIDFromStringAW().

◆ SHCLSIDFromStringAW()

DWORD WINAPI SHCLSIDFromStringAW ( LPCVOID  clsid,
CLSID id 
)

Definition at line 261 of file shellole.c.

262 {
263  if (SHELL_OsIsUnicode())
264  return SHCLSIDFromStringW (clsid, id);
265  return SHCLSIDFromStringA (clsid, id);
266 }
DWORD WINAPI SHCLSIDFromStringA(LPCSTR clsid, CLSID *id)
Definition: shellole.c:248
static __inline BOOL SHELL_OsIsUnicode(void)
Definition: shell32_main.h:130
REFIID clsid
Definition: shellole.c:60
DWORD WINAPI SHCLSIDFromStringW(LPCWSTR clsid, CLSID *id)
Definition: shellole.c:256

◆ SHCLSIDFromStringW()

DWORD WINAPI SHCLSIDFromStringW ( LPCWSTR  clsid,
CLSID id 
)

Definition at line 256 of file shellole.c.

257 {
258  TRACE("(%p(%s) %p)\n", clsid, debugstr_w(clsid), id);
259  return CLSIDFromString(clsid, id);
260 }
REFIID clsid
Definition: shellole.c:60
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT WINAPI CLSIDFromString(LPCOLESTR idstr, LPCLSID id)
Definition: compobj.c:2338

Referenced by _ILCreateGuidFromStrW(), SHCLSIDFromStringAW(), SHCoCreateInstance(), and SHCreatePropSheetExtArrayEx().

◆ SHCoCreateInstance()

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

Definition at line 105 of file shellole.c.

111 {
112  DWORD hres;
113  CLSID iid;
114  const CLSID * myclsid = clsid;
115  WCHAR sKeyName[MAX_PATH];
116  WCHAR sClassID[60];
117  WCHAR sDllPath[MAX_PATH];
118  HKEY hKey = 0;
119  DWORD dwSize;
120  IClassFactory * pcf = NULL;
121 
122  if(!ppv) return E_POINTER;
123  *ppv=NULL;
124 
125  /* if the clsid is a string, convert it */
126  if (!clsid)
127  {
128  if (!aclsid) return REGDB_E_CLASSNOTREG;
129  SHCLSIDFromStringW(aclsid, &iid);
130  myclsid = &iid;
131  }
132 
133  TRACE("(%p,%s,unk:%p,%s,%p)\n",
134  aclsid,shdebugstr_guid(myclsid),pUnkOuter,shdebugstr_guid(refiid),ppv);
135 
136  if (SUCCEEDED(DllGetClassObject(myclsid, &IID_IClassFactory,(LPVOID*)&pcf)))
137  {
138  hres = IClassFactory_CreateInstance(pcf, pUnkOuter, refiid, ppv);
139  IClassFactory_Release(pcf);
140  goto end;
141  }
142 
143  /* we look up the dll path in the registry */
144  SHStringFromGUIDW(myclsid, sClassID, ARRAY_SIZE(sClassID));
145  swprintf(sKeyName, L"CLSID\\%s\\InprocServer32", sClassID);
146 
147  if (RegOpenKeyExW(HKEY_CLASSES_ROOT, sKeyName, 0, KEY_READ, &hKey))
148  return E_ACCESSDENIED;
149 
150  /* if a special registry key is set, we load a shell extension without help of OLE32 */
151  if (!SHQueryValueExW(hKey, L"LoadWithoutCOM", 0, 0, 0, 0))
152  {
153  /* load an external dll without ole32 */
157 
158  dwSize = sizeof(sDllPath);
159  SHQueryValueExW(hKey, NULL, 0,0, sDllPath, &dwSize );
160 
161  if ((hLibrary = LoadLibraryExW(sDllPath, 0, LOAD_WITH_ALTERED_SEARCH_PATH)) == 0) {
162  ERR("couldn't load InprocServer32 dll %s\n", debugstr_w(sDllPath));
164  goto end;
165  } else if (!(DllGetClassObject = (DllGetClassObjectFunc)GetProcAddress(hLibrary, "DllGetClassObject"))) {
166  ERR("couldn't find function DllGetClassObject in %s\n", debugstr_w(sDllPath));
169  goto end;
170  } else if (FAILED(hres = DllGetClassObject(myclsid, &IID_IClassFactory, (LPVOID*)&pcf))) {
171  TRACE("GetClassObject failed 0x%08x\n", hres);
172  goto end;
173  }
174 
175  hres = IClassFactory_CreateInstance(pcf, pUnkOuter, refiid, ppv);
176  IClassFactory_Release(pcf);
177  } else {
178 
179  /* load an external dll in the usual way */
180  hres = CoCreateInstance(myclsid, pUnkOuter, CLSCTX_INPROC_SERVER, refiid, ppv);
181  }
182 
183 end:
184  if (hKey) RegCloseKey(hKey);
185  if(hres!=S_OK)
186  {
187  ERR("failed (0x%08x) to create CLSID:%s IID:%s\n",
188  hres, shdebugstr_guid(myclsid), shdebugstr_guid(refiid));
189  ERR("class not found in registry\n");
190  }
191 
192  TRACE("-- instance: %p\n",*ppv);
193  return hres;
194 }
#define E_ACCESSDENIED
Definition: winerror.h:2849
#define REFIID
Definition: guiddef.h:118
static HRESULT(WINAPI *pSHPropStgCreate)(IPropertySetStorage *
#define KEY_READ
Definition: nt_native.h:1023
#define REFCLSID
Definition: guiddef.h:117
HINSTANCE WINAPI DECLSPEC_HOTPATCH LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
Definition: loader.c:288
#define CALLBACK
Definition: compat.h:35
REFIID LPVOID * ppv
Definition: atlbase.h:39
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
HRESULT(CALLBACK * DllGetClassObjectFunc)(REFCLSID clsid, REFIID iid, LPVOID *ppv)
Definition: compobj.c:449
#define LOAD_WITH_ALTERED_SEARCH_PATH
Definition: winbase.h:341
#define L(x)
Definition: ntvdm.h:50
REFIID clsid
Definition: shellole.c:60
if SUCCEEDED(hr)
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
#define FreeLibrary(x)
Definition: compat.h:607
HRESULT hres
Definition: protocol.c:465
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define MAX_PATH
Definition: compat.h:34
unsigned long DWORD
Definition: ntddk_ex.h:95
DWORD WINAPI SHCLSIDFromStringW(LPCWSTR clsid, CLSID *id)
Definition: shellole.c:256
GLuint GLuint end
Definition: gl.h:1545
DWORD WINAPI SHQueryValueExW(HKEY hKey, LPCWSTR lpszValue, LPDWORD lpReserved, LPDWORD pwType, LPVOID pvData, LPDWORD pcbData)
Definition: reg.c:1461
HMODULE hLibrary
Definition: odbccp32.c:12
int _cdecl swprintf(const WCHAR *,...)
HRESULT WINAPI DECLSPEC_HOTPATCH CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv)
Definition: compobj.c:3325
#define ERR(fmt,...)
Definition: debug.h:110
#define S_OK
Definition: intsafe.h:52
#define REGDB_E_CLASSNOTREG
Definition: winerror.h:2696
FxAutoRegKey hKey
#define ARRAY_SIZE(a)
Definition: main.h:24
#define NULL
Definition: types.h:112
LONG WINAPI RegOpenKeyExW(HKEY hKey, LPCWSTR lpSubKey, DWORD ulOptions, REGSAM samDesired, PHKEY phkResult)
Definition: reg.c:3356
#define GetProcAddress(x, y)
Definition: compat.h:612
#define HKEY_CLASSES_ROOT
Definition: winreg.h:10
#define E_POINTER
Definition: winerror.h:2365
const GUID IID_IClassFactory
INT WINAPI SHStringFromGUIDW(REFGUID guid, LPWSTR lpszDest, INT cchMax)
Definition: ordinal.c:654
#define RegCloseKey(hKey)
Definition: registry.h:47
PSDBQUERYRESULT_VISTA PVOID DWORD * dwSize
Definition: env.c:56
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
Definition: shellole.c:201

Referenced by CFSFolder::_CreateShellExtInstance(), AssocCreate(), CFSFolder::CreateViewObject(), CDefaultContextMenu::DoCopyToMoveToFolder(), CDefaultContextMenu::LoadDynamicContextMenuHandler(), and SHELL32_CoCreateInitSF().

◆ SHCreateDefClassObject()

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

Definition at line 499 of file shellole.c.

505 {
506  IClassFactory * pcf;
507 
508  TRACE("%s %p %p %p %s\n",
509  shdebugstr_guid(riid), ppv, lpfnCI, pcRefDll, shdebugstr_guid(riidInst));
510 
512  if (! (pcf = IDefClF_fnConstructor(lpfnCI, (PLONG)pcRefDll, riidInst))) return E_OUTOFMEMORY;
513  *ppv = pcf;
514  return S_OK;
515 }
#define E_NOINTERFACE
Definition: winerror.h:2364
REFIID riid
Definition: precomp.h:44
REFIID LPVOID * ppv
Definition: atlbase.h:39
const char * shdebugstr_guid(const struct _GUID *id)
Definition: debughlp.cpp:427
LPFNCREATEINSTANCE lpfnCI
Definition: shellole.c:61
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
static IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
Definition: shellole.c:386
#define TRACE(s)
Definition: solgame.cpp:4
#define S_OK
Definition: intsafe.h:52
const GUID IID_IClassFactory
signed int * PLONG
Definition: retypes.h:5
#define IsEqualCLSID(rclsid1, rclsid2)
Definition: guiddef.h:96

◆ SHCreateQueryCancelAutoPlayMoniker()

HRESULT WINAPI SHCreateQueryCancelAutoPlayMoniker ( IMoniker **  moniker)

Definition at line 806 of file shellole.c.

807 {
808  TRACE("%p\n", moniker);
809 
810  if (!moniker) return E_INVALIDARG;
811  return CreateClassMoniker(&CLSID_QueryCancelAutoPlay, moniker);
812 }
#define E_INVALIDARG
Definition: ddrawi.h:101
#define TRACE(s)
Definition: solgame.cpp:4
Definition: main.c:39
HRESULT WINAPI CreateClassMoniker(REFCLSID rclsid, IMoniker **ppmk)
Definition: classmoniker.c:701

◆ SHFree()

void WINAPI SHFree ( LPVOID  pv)

Definition at line 326 of file shellole.c.

327 {
328  TRACE("%p\n",pv);
329  CoTaskMemFree(pv);
330 }
VOID WINAPI CoTaskMemFree(LPVOID ptr)
Definition: ifs.c:442
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by _DestroyCallback(), CFSDropTarget::_DoDrop(), _ILCreateControlPanel(), _ILCreatePrinters(), _ILFreeaPidl(), CFSDropTarget::_RepositionItems(), _tmain(), CDesktopFolderEnum::AddItemsFromClassicStartMenuKey(), BrsFolder_NewFolder(), BrsFolder_OnDestroy(), BrsFolder_Treeview_Delete(), BrsFolder_Treeview_Rename(), CRecycleBinEnum::CBEnumRecycleBin(), CBSearchRecycleBin(), CPrintersEnum::CreatePrintersEnumList(), CEnumIDListBase::DeleteList(), CChangeNotifyServer::DestroyItem(), CDefaultContextMenu::DoCreateNewFolder(), DrivesContextMenuCallback(), CAddressEditBox::Execute(), FileMenu_DeleteAllItems(), FileMenu_Destroy(), CDefView::fill_list(), CDefView::FillList(), FillTreeView(), FindExecutableA(), FM_SetMenuParameter(), CDefView::GetSelections(), ILAppendID(), ILFree(), ILLoadFromStream(), CNetworkConnections::Initialize(), CRecycleBin::Initialize(), CFSFolder::Initialize(), CNetFolder::Initialize(), CPrinterFolder::Initialize(), CControlPanelFolder::Initialize(), CMyDocsFolder::Initialize(), CDesktopFolderEnum::Initialize(), CCPLItemMenu::InvokeCommand(), CDefView::LV_RenameItem(), CDefView::OnDestroy(), CDefView::OnNotify(), OpenAs_RunDLLA(), PathResolveA(), r_verify_pidl(), RegFolderContextMenuCallback(), RenderFILENAMEA(), RenderFILENAMEW(), CNewMenu::SelectNewItem(), SHBindToParent(), ShellExecCmdLine(), ShellExecuteExA(), SHGetFileInfoW(), sic_free(), SIC_IconAppend(), CFindFolder::StartSearch(), StartWithCommandLine(), test_printers_folder(), WOWShellExecute(), CAdminToolsFolder::~CAdminToolsFolder(), CControlPanelFolder::~CControlPanelFolder(), CDefView::~CDefView(), CDrivesFolder::~CDrivesFolder(), CEnumIDList::~CEnumIDList(), CFontsFolder::~CFontsFolder(), CFSDropTarget::~CFSDropTarget(), CFSFolder::~CFSFolder(), CMyDocsFolder::~CMyDocsFolder(), CNetFolder::~CNetFolder(), CNetworkConnections::~CNetworkConnections(), CPrinterFolder::~CPrinterFolder(), and CRecycleBin::~CRecycleBin().

◆ SHGetDesktopFolder()

HRESULT WINAPI SHGetDesktopFolder ( IShellFolder **  psf)

Definition at line 336 of file shellole.c.

337 {
338  HRESULT hres;
339 
340  TRACE("(%p)\n", psf);
341 
342  if(!psf) return E_INVALIDARG;
343 
344  *psf = NULL;
345  hres = ISF_Desktop_Constructor(NULL, &IID_IShellFolder, (LPVOID*)psf);
346 
347  TRACE("-- %p->(%p) 0x%08x\n", psf, *psf, hres);
348  return hres;
349 }
#define E_INVALIDARG
Definition: ddrawi.h:101
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define NULL
Definition: types.h:112

◆ SHGetMalloc()

HRESULT WINAPI SHGetMalloc ( LPMALLOC lpmal)

Definition at line 285 of file shellole.c.

286 {
287  TRACE("(%p)\n", lpmal);
288  return CoGetMalloc(MEMCTX_TASK, lpmal);
289 }
HRESULT WINAPI CoGetMalloc(DWORD context, IMalloc **imalloc)
Definition: ifs.c:403
#define TRACE(s)
Definition: solgame.cpp:4

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 678 of file shellole.c.

681 {
682  PROPSPEC prop;
683  PROPVARIANT ret;
684  HRESULT hres;
685 
686  TRACE("%p %s %s %x %x %x %p %p\n", psstg, debugstr_guid(fmtid), debugstr_guid(pclsid),
687  grfFlags, grfMode, dwDisposition, ppstg, puCodePage);
688 
689  hres = IPropertySetStorage_Open(psstg, fmtid, grfMode, ppstg);
690 
691  switch(dwDisposition) {
692  case CREATE_ALWAYS:
693  if(SUCCEEDED(hres)) {
694  IPropertyStorage_Release(*ppstg);
695  hres = IPropertySetStorage_Delete(psstg, fmtid);
696  if(FAILED(hres))
697  return hres;
698  hres = E_FAIL;
699  }
700 
701  case OPEN_ALWAYS:
702  case CREATE_NEW:
703  if(FAILED(hres))
704  hres = IPropertySetStorage_Create(psstg, fmtid, pclsid,
705  grfFlags, grfMode, ppstg);
706 
707  case OPEN_EXISTING:
708  if(FAILED(hres))
709  return hres;
710 
711  if(puCodePage) {
712  prop.ulKind = PRSPEC_PROPID;
713  prop.u.propid = PID_CODEPAGE;
714  hres = IPropertyStorage_ReadMultiple(*ppstg, 1, &prop, &ret);
715  if(FAILED(hres) || ret.vt!=VT_I2)
716  *puCodePage = 0;
717  else
718  *puCodePage = ret.u.iVal;
719  }
720  }
721 
722  return S_OK;
723 }
#define E_FAIL
Definition: ddrawi.h:102
#define PID_CODEPAGE
Definition: suminfo.c:43
if SUCCEEDED(hr)
#define debugstr_guid
Definition: kernel32.h:35
#define OPEN_EXISTING
Definition: compat.h:634
#define TRACE(s)
Definition: solgame.cpp:4
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
#define OPEN_ALWAYS
Definition: disk.h:70
int ret
#define S_OK
Definition: intsafe.h:52
#define CREATE_ALWAYS
Definition: disk.h:72
#define CREATE_NEW
Definition: disk.h:69
Definition: compat.h:2156

◆ SHPropStgReadMultiple()

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

Definition at line 728 of file shellole.c.

730 {
731  STATPROPSETSTG stat;
732  HRESULT hres;
733 
734  FIXME("%p %u %u %p %p\n", pps, uCodePage, cpspec, rgpspec, rgvar);
735 
736  memset(rgvar, 0, cpspec*sizeof(PROPVARIANT));
737  hres = IPropertyStorage_ReadMultiple(pps, cpspec, rgpspec, rgvar);
738  if(FAILED(hres))
739  return hres;
740 
741  if(!uCodePage) {
742  PROPSPEC prop;
743  PROPVARIANT ret;
744 
745  prop.ulKind = PRSPEC_PROPID;
746  prop.u.propid = PID_CODEPAGE;
747  hres = IPropertyStorage_ReadMultiple(pps, 1, &prop, &ret);
748  if(FAILED(hres) || ret.vt!=VT_I2)
749  return S_OK;
750 
751  uCodePage = ret.u.iVal;
752  }
753 
754  hres = IPropertyStorage_Stat(pps, &stat);
755  if(FAILED(hres))
756  return S_OK;
757 
758  /* TODO: do something with codepage and stat */
759  return S_OK;
760 }
#define PID_CODEPAGE
Definition: suminfo.c:43
#define FIXME(fmt,...)
Definition: debug.h:111
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
int ret
Definition: stat.h:55
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
#define S_OK
Definition: intsafe.h:52
#define memset(x, y, z)
Definition: compat.h:39
Definition: compat.h:2156

◆ SHPropStgWriteMultiple()

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

Definition at line 765 of file shellole.c.

767 {
768  STATPROPSETSTG stat;
769  UINT codepage;
770  HRESULT hres;
771 
772  FIXME("%p %p %u %p %p %d\n", pps, uCodePage, cpspec, rgpspec, rgvar, propidNameFirst);
773 
774  hres = IPropertyStorage_Stat(pps, &stat);
775  if(FAILED(hres))
776  return hres;
777 
778  if(uCodePage && *uCodePage)
779  codepage = *uCodePage;
780  else {
781  PROPSPEC prop;
782  PROPVARIANT ret;
783 
784  prop.ulKind = PRSPEC_PROPID;
785  prop.u.propid = PID_CODEPAGE;
786  hres = IPropertyStorage_ReadMultiple(pps, 1, &prop, &ret);
787  if(FAILED(hres))
788  return hres;
789  if(ret.vt!=VT_I2 || !ret.u.iVal)
790  return E_FAIL;
791 
792  codepage = ret.u.iVal;
793  if(uCodePage)
794  *uCodePage = codepage;
795  }
796 
797  /* TODO: do something with codepage and stat */
798 
799  hres = IPropertyStorage_WriteMultiple(pps, cpspec, rgpspec, rgvar, propidNameFirst);
800  return hres;
801 }
#define E_FAIL
Definition: ddrawi.h:102
#define PID_CODEPAGE
Definition: suminfo.c:43
#define FIXME(fmt,...)
Definition: debug.h:111
int codepage
Definition: win_iconv.c:156
HRESULT hres
Definition: protocol.c:465
LONG HRESULT
Definition: typedefs.h:79
int ret
Definition: stat.h:55
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
unsigned int UINT
Definition: ndis.h:50
Definition: compat.h:2156

◆ SHStringFromGUIDW()

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

Definition at line 654 of file ordinal.c.

655 {
656  WCHAR xguid[40];
657  INT iLen;
658  static const WCHAR wszFormat[] = {'{','%','0','8','l','X','-','%','0','4','X','-','%','0','4','X','-',
659  '%','0','2','X','%','0','2','X','-','%','0','2','X','%','0','2','X','%','0','2','X','%','0','2',
660  'X','%','0','2','X','%','0','2','X','}',0};
661 
662  TRACE("(%s,%p,%d)\n", debugstr_guid(guid), lpszDest, cchMax);
663 
664  sprintfW(xguid, wszFormat, guid->Data1, guid->Data2, guid->Data3,
665  guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3],
666  guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]);
667 
668  iLen = strlenW(xguid) + 1;
669 
670  if (iLen > cchMax)
671  return 0;
672  memcpy(lpszDest, xguid, iLen*sizeof(WCHAR));
673  return iLen;
674 }
WINE_UNICODE_INLINE unsigned int strlenW(const WCHAR *str)
Definition: unicode.h:212
int32_t INT
Definition: typedefs.h:58
const GUID * guid
WCHAR lpszDest[260]
#define debugstr_guid
Definition: kernel32.h:35
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
UINT cchMax
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define sprintfW
Definition: unicode.h:58

Referenced by SHCoCreateInstance().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( shell  )

Variable Documentation

◆ clsid

◆ dclfvt

static const IClassFactoryVtbl dclfvt
static
Initial value:
=
{
}
static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
Definition: shellole.c:426
static HRESULT WINAPI IDefClF_fnLockServer(LPCLASSFACTORY iface, BOOL fLock)
Definition: shellole.c:480
static HRESULT WINAPI IDefClF_fnQueryInterface(LPCLASSFACTORY iface, REFIID riid, LPVOID *ppvObj)
Definition: shellole.c:405
static HRESULT WINAPI IDefClF_fnCreateInstance(LPCLASSFACTORY iface, LPUNKNOWN pUnkOuter, REFIID riid, LPVOID *ppvObject)
Definition: shellole.c:458
static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
Definition: shellole.c:438

Definition at line 380 of file shellole.c.

Referenced by IDefClF_fnConstructor().

◆ InterfaceTable

const { ... } 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
#define NULL
Definition: types.h:112

Referenced by DllGetClassObject().

◆ lpfnCI