Cleanup, small fixes, a few new stubs.

This commit is contained in:
Juergen Schmied 1998-11-15 13:28:00 +00:00 committed by Alexandre Julliard
parent cf5faa6421
commit 72b76d1a41
13 changed files with 648 additions and 588 deletions

View File

@ -11,6 +11,7 @@ C_SRCS = \
dataobject.c \ dataobject.c \
enumidlist.c \ enumidlist.c \
folders.c \ folders.c \
iconcache.c \
pidl.c \ pidl.c \
shell32_main.c \ shell32_main.c \
shellole.c \ shellole.c \

View File

@ -9,6 +9,8 @@
#include "pidl.h" #include "pidl.h"
#include "shlobj.h" #include "shlobj.h"
#include "shell32_main.h" #include "shell32_main.h"
#include "shresdef.h"
#include "if_macros.h"
#define __T(x) x #define __T(x) x
#define _T(x) __T(x) #define _T(x) __T(x)
@ -90,7 +92,6 @@ static ULONG WINAPI IContextMenu_Release(LPCONTEXTMENU this)
{ IContextMenu_FreePidlTable(this); { IContextMenu_FreePidlTable(this);
} }
HeapFree(GetProcessHeap(),0,this); HeapFree(GetProcessHeap(),0,this);
return 0; return 0;
} }
@ -130,7 +131,8 @@ LPCONTEXTMENU IContextMenu_Constructor(LPSHELLFOLDER pSFParent, LPCITEMIDLIST *a
/************************************************************************** /**************************************************************************
* ICM_InsertItem() * ICM_InsertItem()
*/ */
static void ICM_InsertItem (HMENU32 hmenu, UINT32 indexMenu, UINT32 wID, UINT32 fType, LPSTR dwTypeData, UINT32 fState) void WINAPI _InsertMenuItem (HMENU32 hmenu, UINT32 indexMenu, BOOL32 fByPosition,
UINT32 wID, UINT32 fType, LPSTR dwTypeData, UINT32 fState)
{ MENUITEMINFO32A mii; { MENUITEMINFO32A mii;
ZeroMemory(&mii, sizeof(mii)); ZeroMemory(&mii, sizeof(mii));
@ -145,14 +147,14 @@ static void ICM_InsertItem (HMENU32 hmenu, UINT32 indexMenu, UINT32 wID, UINT32
} }
mii.wID = wID; mii.wID = wID;
mii.fType = fType; mii.fType = fType;
InsertMenuItem32A( hmenu, indexMenu, TRUE, &mii); InsertMenuItem32A( hmenu, indexMenu, fByPosition, &mii);
} }
/************************************************************************** /**************************************************************************
* IContextMenu_QueryContextMenu() * IContextMenu_QueryContextMenu()
*/ */
static HRESULT WINAPI IContextMenu_QueryContextMenu( LPCONTEXTMENU this, HMENU32 hmenu, static HRESULT WINAPI IContextMenu_QueryContextMenu( LPCONTEXTMENU this, HMENU32 hmenu, UINT32 indexMenu,
UINT32 indexMenu,UINT32 idCmdFirst,UINT32 idCmdLast,UINT32 uFlags) UINT32 idCmdFirst,UINT32 idCmdLast,UINT32 uFlags)
{ BOOL32 fExplore ; { BOOL32 fExplore ;
TRACE(shell,"(%p)->(hmenu=%x indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",this, hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags); TRACE(shell,"(%p)->(hmenu=%x indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n",this, hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
@ -161,17 +163,17 @@ static HRESULT WINAPI IContextMenu_QueryContextMenu( LPCONTEXTMENU this, HMENU3
{ if(!this->bAllValues) { if(!this->bAllValues)
{ fExplore = uFlags & CMF_EXPLORE; { fExplore = uFlags & CMF_EXPLORE;
if(fExplore) if(fExplore)
{ ICM_InsertItem(hmenu, indexMenu++, idCmdFirst+IDM_EXPLORE, MFT_STRING, TEXT("&Explore"), MFS_ENABLED|MFS_DEFAULT); { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, TEXT("&Explore"), MFS_ENABLED|MFS_DEFAULT);
ICM_InsertItem(hmenu, indexMenu++, idCmdFirst+IDM_OPEN, MFT_STRING, TEXT("&Open"), MFS_ENABLED); _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, TEXT("&Open"), MFS_ENABLED);
} }
else else
{ ICM_InsertItem(hmenu, indexMenu++, idCmdFirst+IDM_OPEN, MFT_STRING, TEXT("&Open"), MFS_ENABLED|MFS_DEFAULT); { _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_OPEN, MFT_STRING, TEXT("&Open"), MFS_ENABLED|MFS_DEFAULT);
ICM_InsertItem(hmenu, indexMenu++, idCmdFirst+IDM_EXPLORE, MFT_STRING, TEXT("&Explore"), MFS_ENABLED); _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_EXPLORE, MFT_STRING, TEXT("&Explore"), MFS_ENABLED);
} }
if(uFlags & CMF_CANRENAME) if(uFlags & CMF_CANRENAME)
{ ICM_InsertItem(hmenu, indexMenu++, 0, MFT_SEPARATOR, NULL, 0); { _InsertMenuItem(hmenu, indexMenu++, TRUE, 0, MFT_SEPARATOR, NULL, 0);
ICM_InsertItem(hmenu, indexMenu++, idCmdFirst+IDM_RENAME, MFT_STRING, TEXT("&Rename"), (IContextMenu_CanRenameItems(this) ? MFS_ENABLED : MFS_DISABLED)); _InsertMenuItem(hmenu, indexMenu++, TRUE, idCmdFirst+IDM_RENAME, MFT_STRING, TEXT("&Rename"), (IContextMenu_CanRenameItems(this) ? MFS_ENABLED : MFS_DISABLED));
} }
} }
return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (IDM_LAST + 1)); return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (IDM_LAST + 1));
@ -184,13 +186,35 @@ static HRESULT WINAPI IContextMenu_QueryContextMenu( LPCONTEXTMENU this, HMENU3
*/ */
static HRESULT WINAPI IContextMenu_InvokeCommand(LPCONTEXTMENU this, LPCMINVOKECOMMANDINFO32 lpcmi) static HRESULT WINAPI IContextMenu_InvokeCommand(LPCONTEXTMENU this, LPCMINVOKECOMMANDINFO32 lpcmi)
{ LPITEMIDLIST pidlTemp,pidlFQ; { LPITEMIDLIST pidlTemp,pidlFQ;
LPSHELLBROWSER lpSB;
LPSHELLVIEW lpSV;
HWND32 hWndSV;
SHELLEXECUTEINFO32A sei; SHELLEXECUTEINFO32A sei;
int i; int i;
TRACE(shell,"(%p)->(invcom=%p verb=%p)\n",this,lpcmi,lpcmi->lpVerb); TRACE(shell,"(%p)->(invcom=%p verb=%p wnd=%x)\n",this,lpcmi,lpcmi->lpVerb, lpcmi->hwnd);
if(HIWORD(lpcmi->lpVerb)) if(HIWORD(lpcmi->lpVerb))
{ //the command is being sent via a verb { /* get the active IShellView */
lpSB = (LPSHELLBROWSER)SendMessage32A(lpcmi->hwnd, CWM_GETISHELLBROWSER,0,0);
IShellBrowser_QueryActiveShellView(lpSB, &lpSV);
lpSV->lpvtbl->fnGetWindow(lpSV, &hWndSV);
/* these verbs are used by the filedialogs*/
if (! strcmp(lpcmi->lpVerb,CMDSTR_NEWFOLDER))
{ FIXME(shell,"%s\n",lpcmi->lpVerb);
}
else if (! strcmp(lpcmi->lpVerb,CMDSTR_VIEWLIST))
{ FIXME(shell,"%s\n",lpcmi->lpVerb);
SendMessage32A(hWndSV, WM_COMMAND, MAKEWPARAM(FCIDM_SHVIEW_LISTVIEW,0),0 );
}
else if (! strcmp(lpcmi->lpVerb,CMDSTR_VIEWDETAILS))
{ FIXME(shell,"%s\n",lpcmi->lpVerb);
SendMessage32A(hWndSV, WM_COMMAND, MAKEWPARAM(FCIDM_SHVIEW_REPORTVIEW,0),0 );
}
else
{ FIXME(shell,"please report: unknown verb %s\n",lpcmi->lpVerb);
}
return NOERROR; return NOERROR;
} }
@ -209,7 +233,7 @@ static HRESULT WINAPI IContextMenu_InvokeCommand(LPCONTEXTMENU this, LPCMINVOKEC
} }
pidlTemp = ILCombine(this->pSFParent->mpidl, this->aPidls[i]); pidlTemp = ILCombine(this->pSFParent->mpidl, this->aPidls[i]);
pidlFQ = ILCombine(this->pSFParent->mpidlNSRoot, pidlTemp); pidlFQ = ILCombine(this->pSFParent->pMyPidl, pidlTemp);
SHFree(pidlTemp); SHFree(pidlTemp);
ZeroMemory(&sei, sizeof(sei)); ZeroMemory(&sei, sizeof(sei));

View File

@ -246,7 +246,7 @@ static ULONG WINAPI IDataObject_Release(LPDATAOBJECT this)
* NOTES * NOTES
* get or register the "Shell IDList Array" clipformat * get or register the "Shell IDList Array" clipformat
*/ */
static BOOL32 DATAOBJECT_InitShellIDList() static BOOL32 DATAOBJECT_InitShellIDList(void)
{ if (cfShellIDList) { if (cfShellIDList)
{ return(TRUE); { return(TRUE);
} }
@ -261,7 +261,7 @@ static BOOL32 DATAOBJECT_InitShellIDList()
* NOTES * NOTES
* get or register the "FileGroupDescriptor" clipformat * get or register the "FileGroupDescriptor" clipformat
*/ */
static BOOL32 DATAOBJECT_InitFileGroupDesc() static BOOL32 DATAOBJECT_InitFileGroupDesc(void)
{ if (cfFileGroupDesc) { if (cfFileGroupDesc)
{ return(TRUE); { return(TRUE);
} }
@ -275,7 +275,7 @@ static BOOL32 DATAOBJECT_InitFileGroupDesc()
* NOTES * NOTES
* get or register the "FileContents" clipformat * get or register the "FileContents" clipformat
*/ */
static BOOL32 DATAOBJECT_InitFileContents() static BOOL32 DATAOBJECT_InitFileContents(void)
{ if (cfFileContents) { if (cfFileContents)
{ return(TRUE); { return(TRUE);
} }
@ -334,10 +334,10 @@ static HRESULT WINAPI IDataObject_GetData (LPDATAOBJECT this, LPFORMATETC32 pfor
TRACE(shell,"-- %lu %lu %lu\n",size, size1, size2 ); TRACE(shell,"-- %lu %lu %lu\n",size, size1, size2 );
TRACE(shell,"-- %p %p\n",this->pidl, pidl); TRACE(shell,"-- %p %p\n",this->pidl, pidl);
TRACE(shell,"-- %p %p %p\n",pcida, (void*)pcida+size,(void*)pcida+size+size1); TRACE(shell,"-- %p %p %p\n",pcida, (LPBYTE)pcida+size,(LPBYTE)pcida+size+size1);
memcpy ((void*)pcida+size, this->pidl, size1); memcpy ((LPBYTE)pcida+size, this->pidl, size1);
memcpy ((void*)pcida+size+size1, pidl, size2); memcpy ((LPBYTE)pcida+size+size1, pidl, size2);
TRACE(shell,"-- after copy\n"); TRACE(shell,"-- after copy\n");
GlobalUnlock32(hmem); GlobalUnlock32(hmem);

View File

@ -78,11 +78,14 @@ static struct IExtractIcon_VTable eivt =
*/ */
LPEXTRACTICON IExtractIcon_Constructor(LPCITEMIDLIST pidl) LPEXTRACTICON IExtractIcon_Constructor(LPCITEMIDLIST pidl)
{ LPEXTRACTICON ei; { LPEXTRACTICON ei;
ei=(LPEXTRACTICON)HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIcon)); ei=(LPEXTRACTICON)HeapAlloc(GetProcessHeap(),0,sizeof(IExtractIcon));
ei->ref=1; ei->ref=1;
ei->lpvtbl=&eivt; ei->lpvtbl=&eivt;
ei->pidl=ILClone(pidl); ei->pidl=ILClone(pidl);
pdump(pidl);
TRACE(shell,"(%p)\n",ei); TRACE(shell,"(%p)\n",ei);
return ei; return ei;
} }
@ -134,19 +137,15 @@ static ULONG WINAPI IExtractIcon_Release(LPEXTRACTICON this)
} }
/************************************************************************** /**************************************************************************
* IExtractIcon_GetIconLocation * IExtractIcon_GetIconLocation
* NOTE
* FIXME returns allways the icon no. 3 (closed Folder)
*/ */
static HRESULT WINAPI IExtractIcon_GetIconLocation(LPEXTRACTICON this, UINT32 uFlags, LPSTR szIconFile, UINT32 cchMax, int * piIndex, UINT32 * pwFlags) static HRESULT WINAPI IExtractIcon_GetIconLocation(LPEXTRACTICON this, UINT32 uFlags, LPSTR szIconFile, UINT32 cchMax, int * piIndex, UINT32 * pwFlags)
{ FIXME (shell,"(%p) (flags=%u file=%s max=%u %p %p) semi-stub\n", this, uFlags, szIconFile, cchMax, piIndex, pwFlags); { FIXME (shell,"(%p) (flags=%u file=%s max=%u %p %p) semi-stub\n", this, uFlags, szIconFile, cchMax, piIndex, pwFlags);
if (!szIconFile)
{ *piIndex = 20; *piIndex = (int) SHMapPIDLToSystemImageListIndex(0, this->pidl,0);
}
else
{ *piIndex = 3;
}
*pwFlags = GIL_NOTFILENAME; *pwFlags = GIL_NOTFILENAME;
FIXME (shell,"-- %x\n",*piIndex);
return NOERROR; return NOERROR;
} }
/************************************************************************** /**************************************************************************

View File

@ -27,9 +27,9 @@
#include "debug.h" #include "debug.h"
#include "winreg.h" #include "winreg.h"
#include "imagelist.h" #include "imagelist.h"
#include "sysmetrics.h"
#include "commctrl.h" #include "commctrl.h"
#include "authors.h" #include "authors.h"
#include "pidl.h" #include "pidl.h"
#include "shell32_main.h" #include "shell32_main.h"
@ -95,32 +95,6 @@ void WINAPI Control_RunDLL( HWND32 hwnd, LPCVOID code, LPCSTR cmd, DWORD arg4 )
debugstr_a(cmd), arg4); debugstr_a(cmd), arg4);
} }
/*************************************************************************
* Shell_GetImageList [SHELL32.71]
*
* PARAMETERS
* imglist[1|2] [OUT] pointer which recive imagelist handles
*
* NOTES
* undocumented
* I don't know, which pointer is which. They may have to be
* exchanged. (jsch)
*/
BOOL32 WINAPI Shell_GetImageList(HIMAGELIST * imglist1,HIMAGELIST * imglist2)
{ WARN(shell,"(%p,%p):semi-stub.\n",imglist1,imglist2);
if (imglist1)
{ *imglist1=ShellSmallIconList;
}
if (imglist2)
{ *imglist2=ShellBigIconList;
}
return TRUE;
}
HIMAGELIST ShellSmallIconList = 0;
HIMAGELIST ShellBigIconList = 0;
/************************************************************************* /*************************************************************************
* SHGetFileInfoA [SHELL32.254] * SHGetFileInfoA [SHELL32.254]
* *
@ -552,7 +526,7 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
{ case FT_DIR: { case FT_DIR:
/* Directory: get the value from the registry, if its not there /* Directory: get the value from the registry, if its not there
create it and the directory*/ create it and the directory*/
if (RegQueryValueEx32A(key,buffer,NULL,&type,tpath,&tpathlen)) if (RegQueryValueEx32A(key,buffer,NULL,&type,(LPBYTE)tpath,&tpathlen))
{ GetWindowsDirectory32A(npath,MAX_PATH); { GetWindowsDirectory32A(npath,MAX_PATH);
PathAddBackslash32A(npath); PathAddBackslash32A(npath);
switch (nFolder) switch (nFolder)
@ -610,7 +584,7 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32 hwndOwner, INT32 nFolder, LPITE
RegCloseKey(key); RegCloseKey(key);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
if (RegSetValueEx32A(key,buffer,0,REG_SZ,npath,sizeof(npath)+1)) if (RegSetValueEx32A(key,buffer,0,REG_SZ,(LPBYTE)npath,sizeof(npath)+1))
{ ERR(shell,"could not create value %s\n",buffer); { ERR(shell,"could not create value %s\n",buffer);
RegCloseKey(key); RegCloseKey(key);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
@ -753,7 +727,9 @@ LRESULT WINAPI AboutDlgProc32( HWND32 hWnd, UINT32 msg, WPARAM32 wParam,
if( lpDragInfo && lpDragInfo->wFlags == DRAGOBJ_DATA ) if( lpDragInfo && lpDragInfo->wFlags == DRAGOBJ_DATA )
{ RECT32 rect; { RECT32 rect;
if( __get_dropline( hWnd, &rect ) ) if( __get_dropline( hWnd, &rect ) )
{ POINT32 pt = { lpDragInfo->pt.x, lpDragInfo->pt.y }; { POINT32 pt;
pt.x=lpDragInfo->pt.x;
pt.x=lpDragInfo->pt.y;
rect.bottom += DROP_FIELD_HEIGHT; rect.bottom += DROP_FIELD_HEIGHT;
if( PtInRect32( &rect, pt ) ) if( PtInRect32( &rect, pt ) )
{ SetWindowLong32A( hWnd, DWL_MSGRESULT, 1 ); { SetWindowLong32A( hWnd, DWL_MSGRESULT, 1 );
@ -905,11 +881,11 @@ DWORD WINAPI SHGetPathFromIDList32A (LPCITEMIDLIST pidl,LPSTR pszPath)
} }
type=REG_SZ; type=REG_SZ;
strcpy (buffer,"Desktop"); /*registry name*/ strcpy (buffer,"Desktop"); /*registry name*/
if ( RegQueryValueEx32A(key,buffer,NULL,&type,tpath,&tpathlen)) if ( RegQueryValueEx32A(key,buffer,NULL,&type,(LPBYTE)tpath,&tpathlen))
{ GetWindowsDirectory32A(tpath,MAX_PATH); { GetWindowsDirectory32A(tpath,MAX_PATH);
PathAddBackslash32A(tpath); PathAddBackslash32A(tpath);
strcat (tpath,"Desktop"); /*folder name*/ strcat (tpath,"Desktop"); /*folder name*/
RegSetValueEx32A(key,buffer,0,REG_SZ,tpath,tpathlen); RegSetValueEx32A(key,buffer,0,REG_SZ,(LPBYTE)tpath,tpathlen);
CreateDirectory32A(tpath,NULL); CreateDirectory32A(tpath,NULL);
} }
RegCloseKey(key); RegCloseKey(key);
@ -942,16 +918,19 @@ DWORD WINAPI SHGetPathFromIDList32W (LPCITEMIDLIST pidl,LPWSTR pszPath)
} }
void (CALLBACK* pDLLInitComctl)(); void (CALLBACK* pDLLInitComctl)(void);
INT32 (CALLBACK* pImageList_AddIcon) (HIMAGELIST himl, HICON32 hIcon); INT32 (CALLBACK* pImageList_AddIcon) (HIMAGELIST himl, HICON32 hIcon);
INT32 (CALLBACK* pImageList_ReplaceIcon) (HIMAGELIST, INT32, HICON32); INT32 (CALLBACK* pImageList_ReplaceIcon) (HIMAGELIST, INT32, HICON32);
HIMAGELIST (CALLBACK * pImageList_Create) (INT32,INT32,UINT32,INT32,INT32); HIMAGELIST (CALLBACK * pImageList_Create) (INT32,INT32,UINT32,INT32,INT32);
HICON32 (CALLBACK * pImageList_GetIcon) (HIMAGELIST, INT32, UINT32); HICON32 (CALLBACK * pImageList_GetIcon) (HIMAGELIST, INT32, UINT32);
INT32 (CALLBACK* pImageList_GetImageCount)(HIMAGELIST);
HDPA (CALLBACK* pDPA_Create) (INT32); HDPA (CALLBACK* pDPA_Create) (INT32);
INT32 (CALLBACK* pDPA_InsertPtr) (const HDPA, INT32, LPVOID); INT32 (CALLBACK* pDPA_InsertPtr) (const HDPA, INT32, LPVOID);
BOOL32 (CALLBACK* pDPA_Sort) (const HDPA, PFNDPACOMPARE, LPARAM); BOOL32 (CALLBACK* pDPA_Sort) (const HDPA, PFNDPACOMPARE, LPARAM);
LPVOID (CALLBACK* pDPA_GetPtr) (const HDPA, INT32); LPVOID (CALLBACK* pDPA_GetPtr) (const HDPA, INT32);
BOOL32 (CALLBACK* pDPA_Destroy) (const HDPA); BOOL32 (CALLBACK* pDPA_Destroy) (const HDPA);
INT32 (CALLBACK *pDPA_Search) (const HDPA, LPVOID, INT32, PFNDPACOMPARE, LPARAM, UINT32);
/************************************************************************* /*************************************************************************
* SHELL32 LibMain * SHELL32 LibMain
@ -963,21 +942,12 @@ BOOL32 (CALLBACK* pDPA_Destroy) (const HDPA);
HINSTANCE32 shell32_hInstance; HINSTANCE32 shell32_hInstance;
BOOL32 WINAPI Shell32LibMain(HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvReserved) BOOL32 WINAPI Shell32LibMain(HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{ HICON32 htmpIcon; { HINSTANCE32 hComctl32;
UINT32 iiconindex;
UINT32 index;
CHAR szShellPath[MAX_PATH];
HINSTANCE32 hComctl32;
TRACE(shell,"0x%x 0x%lx %p\n", hinstDLL, fdwReason, lpvReserved); TRACE(shell,"0x%x 0x%lx %p\n", hinstDLL, fdwReason, lpvReserved);
shell32_hInstance = hinstDLL; shell32_hInstance = hinstDLL;
GetWindowsDirectory32A(szShellPath,MAX_PATH);
PathAddBackslash32A(szShellPath);
strcat(szShellPath,"system\\shell32.dll");
if (fdwReason==DLL_PROCESS_ATTACH) if (fdwReason==DLL_PROCESS_ATTACH)
{ hComctl32 = LoadLibrary32A("COMCTL32.DLL"); { hComctl32 = LoadLibrary32A("COMCTL32.DLL");
if (hComctl32) if (hComctl32)
@ -989,12 +959,15 @@ BOOL32 WINAPI Shell32LibMain(HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvRe
pImageList_AddIcon=GetProcAddress32(hComctl32,"ImageList_AddIcon"); pImageList_AddIcon=GetProcAddress32(hComctl32,"ImageList_AddIcon");
pImageList_ReplaceIcon=GetProcAddress32(hComctl32,"ImageList_ReplaceIcon"); pImageList_ReplaceIcon=GetProcAddress32(hComctl32,"ImageList_ReplaceIcon");
pImageList_GetIcon=GetProcAddress32(hComctl32,"ImageList_GetIcon"); pImageList_GetIcon=GetProcAddress32(hComctl32,"ImageList_GetIcon");
pImageList_GetImageCount=GetProcAddress32(hComctl32,"ImageList_GetImageCount");
/* imports by ordinal, pray that it works*/ /* imports by ordinal, pray that it works*/
pDPA_Create=GetProcAddress32(hComctl32, (LPCSTR)328L); pDPA_Create=GetProcAddress32(hComctl32, (LPCSTR)328L);
pDPA_Destroy=GetProcAddress32(hComctl32, (LPCSTR)329L); pDPA_Destroy=GetProcAddress32(hComctl32, (LPCSTR)329L);
pDPA_GetPtr=GetProcAddress32(hComctl32, (LPCSTR)332L); pDPA_GetPtr=GetProcAddress32(hComctl32, (LPCSTR)332L);
pDPA_InsertPtr=GetProcAddress32(hComctl32, (LPCSTR)334L); pDPA_InsertPtr=GetProcAddress32(hComctl32, (LPCSTR)334L);
pDPA_Sort=GetProcAddress32(hComctl32, (LPCSTR)338L); pDPA_Sort=GetProcAddress32(hComctl32, (LPCSTR)338L);
pDPA_Search=GetProcAddress32(hComctl32, (LPCSTR)339L);
FreeLibrary32(hComctl32); FreeLibrary32(hComctl32);
} }
@ -1003,29 +976,7 @@ BOOL32 WINAPI Shell32LibMain(HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvRe
ERR(shell,"P A N I C error getting functionpointers\n"); ERR(shell,"P A N I C error getting functionpointers\n");
exit (1); exit (1);
} }
if ( ! ShellSmallIconList ) SIC_Initialize();
{ if ( (ShellSmallIconList = pImageList_Create(sysMetrics[SM_CXSMICON],sysMetrics[SM_CYSMICON],ILC_COLORDDB | ILC_MASK,0,0x20)) )
{ for (index=0;index < 40; index++)
{ if ( ! ( htmpIcon = ExtractIcon32A(hinstDLL, szShellPath, index))
|| ( -1 == (iiconindex = pImageList_AddIcon (ShellSmallIconList, htmpIcon))) )
{ ERR(shell,"could not initialize iconlist (is shell32.dll in the system directory?)\n");
break;
}
}
}
}
if ( ! ShellBigIconList )
{ if ( (ShellBigIconList = pImageList_Create(SYSMETRICS_CXSMICON, SYSMETRICS_CYSMICON,ILC_COLORDDB | ILC_MASK,0,0x20)) )
{ for (index=0;index < 40; index++)
{ if ( ! (htmpIcon = ExtractIcon32A( hinstDLL, szShellPath, index))
|| (-1 == (iiconindex = pImageList_AddIcon (ShellBigIconList, htmpIcon))) )
{ ERR(shell,"could not initialize iconlist (is shell32.dll in the system directory?)\n");
break;
}
}
}
}
TRACE(shell,"hIconSmall=%p hIconBig=%p\n",ShellSmallIconList, ShellBigIconList);
} }
return TRUE; return TRUE;
} }

View File

@ -16,16 +16,22 @@ extern HIMAGELIST ShellBigIconList;
/******************************************* /*******************************************
* pointer to functions dynamically loaded * pointer to functions dynamically loaded
*/ */
extern void (CALLBACK* pDLLInitComctl)(); extern void (CALLBACK* pDLLInitComctl)(void);
extern INT32 (CALLBACK* pImageList_AddIcon) (HIMAGELIST himl, HICON32 hIcon); extern INT32 (CALLBACK* pImageList_AddIcon) (HIMAGELIST himl, HICON32 hIcon);
extern INT32 (CALLBACK* pImageList_ReplaceIcon) (HIMAGELIST, INT32, HICON32); extern INT32 (CALLBACK* pImageList_ReplaceIcon) (HIMAGELIST, INT32, HICON32);
extern HIMAGELIST (CALLBACK * pImageList_Create) (INT32,INT32,UINT32,INT32,INT32); extern HIMAGELIST (CALLBACK * pImageList_Create) (INT32,INT32,UINT32,INT32,INT32);
extern HICON32 (CALLBACK * pImageList_GetIcon) (HIMAGELIST, INT32, UINT32); extern HICON32 (CALLBACK * pImageList_GetIcon) (HIMAGELIST, INT32, UINT32);
extern INT32 (CALLBACK* pImageList_GetImageCount)(HIMAGELIST);
extern HDPA (CALLBACK* pDPA_Create) (INT32); extern HDPA (CALLBACK* pDPA_Create) (INT32);
extern INT32 (CALLBACK* pDPA_InsertPtr) (const HDPA, INT32, LPVOID); extern INT32 (CALLBACK* pDPA_InsertPtr) (const HDPA, INT32, LPVOID);
extern BOOL32 (CALLBACK* pDPA_Sort) (const HDPA, PFNDPACOMPARE, LPARAM); extern BOOL32 (CALLBACK* pDPA_Sort) (const HDPA, PFNDPACOMPARE, LPARAM);
extern LPVOID (CALLBACK* pDPA_GetPtr) (const HDPA, INT32); extern LPVOID (CALLBACK* pDPA_GetPtr) (const HDPA, INT32);
extern BOOL32 (CALLBACK* pDPA_Destroy) (const HDPA); extern BOOL32 (CALLBACK* pDPA_Destroy) (const HDPA);
extern INT32 (CALLBACK *pDPA_Search) (const HDPA, LPVOID, INT32, PFNDPACOMPARE, LPARAM, UINT32);
extern BOOL32 WINAPI SIC_Initialize(void);
extern HICON32 WINAPI SIC_GetIcon (LPSTR sSourceFile, DWORD dwSourceIndex, BOOL32 bSmallIcon );
/* FIXME should be moved to a header file. IsEqualGUID /* FIXME should be moved to a header file. IsEqualGUID
is declared but not exported in compobj.c !!!*/ is declared but not exported in compobj.c !!!*/
#define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID))) #define IsEqualGUID(rguid1, rguid2) (!memcmp(rguid1, rguid2, sizeof(GUID)))

View File

@ -211,8 +211,8 @@ DWORD WINAPI SHGetMalloc(LPMALLOC32 *lpmal)
static HRESULT WINAPI IClassFactory_QueryInterface(LPCLASSFACTORY,REFIID,LPVOID*); static HRESULT WINAPI IClassFactory_QueryInterface(LPCLASSFACTORY,REFIID,LPVOID*);
static ULONG WINAPI IClassFactory_AddRef(LPCLASSFACTORY); static ULONG WINAPI IClassFactory_AddRef(LPCLASSFACTORY);
static ULONG WINAPI IClassFactory_Release(LPCLASSFACTORY); static ULONG WINAPI IClassFactory_Release(LPCLASSFACTORY);
static HRESULT WINAPI IClassFactory_CreateInstance(); static HRESULT WINAPI IClassFactory_CreateInstance(LPCLASSFACTORY, LPUNKNOWN, REFIID, LPVOID *);
static HRESULT WINAPI IClassFactory_LockServer(); static HRESULT WINAPI IClassFactory_LockServer(LPCLASSFACTORY, BOOL32);
/************************************************************************** /**************************************************************************
* IClassFactory_VTable * IClassFactory_VTable
*/ */
@ -228,7 +228,7 @@ static IClassFactory_VTable clfvt =
* IClassFactory_Constructor * IClassFactory_Constructor
*/ */
LPCLASSFACTORY IClassFactory_Constructor() LPCLASSFACTORY IClassFactory_Constructor(void)
{ LPCLASSFACTORY lpclf; { LPCLASSFACTORY lpclf;
lpclf= (LPCLASSFACTORY)HeapAlloc(GetProcessHeap(),0,sizeof(IClassFactory)); lpclf= (LPCLASSFACTORY)HeapAlloc(GetProcessHeap(),0,sizeof(IClassFactory));
@ -316,7 +316,7 @@ static HRESULT WINAPI IClassFactory_CreateInstance(
{ pObj = (IUnknown *)IContextMenu_Constructor(NULL, NULL, 0); { pObj = (IUnknown *)IContextMenu_Constructor(NULL, NULL, 0);
} }
else if (IsEqualIID(riid, &IID_IDataObject)) else if (IsEqualIID(riid, &IID_IDataObject))
{ pObj = (IUnknown *)IDataObject_Constructor(); { pObj = (IUnknown *)IDataObject_Constructor(0,NULL,NULL,0);
} }
else else
{ ERR(shell,"unknown IID requested\n\tIID:\t%s\n",xriid); { ERR(shell,"unknown IID requested\n\tIID:\t%s\n",xriid);

View File

@ -159,7 +159,7 @@ LPCVOID WINAPI PathFindExtension32AW(LPCVOID path)
* NOTES * NOTES
* append \ if there is none * append \ if there is none
*/ */
LPSTR WINAPI PathAddBackslash32A(LPSTR path) LPSTR WINAPI PathAddBackslash32A(LPCSTR path)
{ int len; { int len;
TRACE(shell,"%p->%s\n",path,path); TRACE(shell,"%p->%s\n",path,path);
@ -171,7 +171,7 @@ LPSTR WINAPI PathAddBackslash32A(LPSTR path)
} }
return path+len; return path+len;
} }
LPWSTR WINAPI PathAddBackslash32W(LPWSTR path) LPWSTR WINAPI PathAddBackslash32W(LPCWSTR path)
{ int len; { int len;
TRACE(shell,"%p->%s\n",path,debugstr_w(path)); TRACE(shell,"%p->%s\n",path,debugstr_w(path));
@ -183,7 +183,7 @@ LPWSTR WINAPI PathAddBackslash32W(LPWSTR path)
} }
return path+len; return path+len;
} }
LPVOID WINAPI PathAddBackslash32AW(LPVOID path) LPVOID WINAPI PathAddBackslash32AW(LPCVOID path)
{ if(VERSION_OsIsUnicode()) { if(VERSION_OsIsUnicode())
return PathAddBackslash32W(path); return PathAddBackslash32W(path);
return PathAddBackslash32A(path); return PathAddBackslash32A(path);
@ -195,7 +195,7 @@ LPVOID WINAPI PathAddBackslash32AW(LPVOID path)
* NOTES * NOTES
* remove spaces from beginning and end of passed string * remove spaces from beginning and end of passed string
*/ */
LPSTR WINAPI PathRemoveBlanks(LPSTR str) LPSTR WINAPI PathRemoveBlanks(LPCSTR str)
{ LPSTR x = str; { LPSTR x = str;
TRACE(shell,"%s\n",str); TRACE(shell,"%s\n",str);
while (*x==' ') x++; while (*x==' ') x++;
@ -450,6 +450,27 @@ LPVOID WINAPI PathGetArgs(LPVOID cmdline)
} }
return (LPVOID) aptr; return (LPVOID) aptr;
} }
/*************************************************************************
* PathQuoteSpaces [SHELL32.55]
*
* NOTES
* basename(char *fn);
*/
LPSTR WINAPI PathQuoteSpaces32A(LPCSTR aptr)
{ FIXME(shell,"%s\n",aptr);
return 0;
}
LPWSTR WINAPI PathQuoteSpaces32W(LPCWSTR wptr)
{ FIXME(shell,"L%s\n",debugstr_w(wptr));
return 0;
}
LPVOID WINAPI PathQuoteSpaces32AW (LPCVOID fn)
{ if(VERSION_OsIsUnicode())
return PathQuoteSpaces32W(fn);
return PathQuoteSpaces32A(fn);
}
/************************************************************************* /*************************************************************************
* PathUnquoteSpaces [SHELL32.56] * PathUnquoteSpaces [SHELL32.56]
@ -558,22 +579,6 @@ BOOL32 WINAPI PathYetAnotherMakeUniqueName(LPDWORD x,LPDWORD y) {
return TRUE; return TRUE;
} }
/*************************************************************************
* SHMapPIDLToSystemImageListIndex [SHELL32.77]
*
* PARAMETERS
* x pointer to an instance of IShellFolder
*
* NOTES
* exported by ordinal
*
*/
DWORD WINAPI
SHMapPIDLToSystemImageListIndex(LPSHELLFOLDER sh,DWORD y,DWORD z)
{ FIXME(shell,"(SF=%p,pidl=%08lx,%08lx):stub.\n",sh,y,z);
return 0;
}
/************************************************************************* /*************************************************************************
* OleStrToStrN [SHELL32.78] * OleStrToStrN [SHELL32.78]
* *
@ -1051,6 +1056,15 @@ HRESULT WINAPI SHRunControlPanel (DWORD x, DWORD z)
* ShellExecuteEx [SHELL32.291] * ShellExecuteEx [SHELL32.291]
* *
*/ */
BOOL32 WINAPI ShellExecuteEx32 (LPVOID sei)
{ if (VERSION_OsIsUnicode())
return ShellExecuteEx32W (sei);
return ShellExecuteEx32A (sei);
}
/*************************************************************************
* ShellExecuteEx32A [SHELL32.292]
*
*/
BOOL32 WINAPI ShellExecuteEx32A (LPSHELLEXECUTEINFO32A sei) BOOL32 WINAPI ShellExecuteEx32A (LPSHELLEXECUTEINFO32A sei)
{ CHAR szTemp[MAX_PATH]; { CHAR szTemp[MAX_PATH];
@ -1071,6 +1085,30 @@ BOOL32 WINAPI ShellExecuteEx32A (LPSHELLEXECUTEINFO32A sei)
return 0; return 0;
} }
/*************************************************************************
* ShellExecuteEx [SHELL32.293]
*
*/
BOOL32 WINAPI ShellExecuteEx32W (LPSHELLEXECUTEINFO32W sei)
{ WCHAR szTemp[MAX_PATH];
FIXME(shell,"(%p): stub\n",sei);
if (sei->fMask & SEE_MASK_IDLIST)
{ SHGetPathFromIDList32W (sei->lpIDList,szTemp);
TRACE (shell,"-- idlist=%p (%s)\n", sei->lpIDList, debugstr_w(szTemp));
}
if (sei->fMask & SEE_MASK_CLASSNAME)
{ TRACE (shell,"-- classname= %s\n", debugstr_w(sei->lpClass));
}
if (sei->lpVerb)
{ TRACE (shell,"-- action=%s\n", debugstr_w(sei->lpVerb));
}
return 0;
}
/************************************************************************* /*************************************************************************
* SHSetInstanceExplorer [SHELL32.176] * SHSetInstanceExplorer [SHELL32.176]
* *
@ -1218,7 +1256,7 @@ BOOL32 WINAPI FileIconInit(BOOL32 bFullInit)
* IsUserAdmin [NT 4.0:SHELL32.680] * IsUserAdmin [NT 4.0:SHELL32.680]
* *
*/ */
HRESULT WINAPI IsUserAdmin() HRESULT WINAPI IsUserAdmin(void)
{ FIXME(shell,"stub\n"); { FIXME(shell,"stub\n");
return TRUE; return TRUE;
} }
@ -1533,7 +1571,7 @@ HRESULT WINAPI DriveType32(DWORD u)
* SHAbortInvokeCommand [SHELL32.198] * SHAbortInvokeCommand [SHELL32.198]
* *
*/ */
HRESULT WINAPI SHAbortInvokeCommand() HRESULT WINAPI SHAbortInvokeCommand(void)
{ FIXME(shell,"stub\n"); { FIXME(shell,"stub\n");
return 1; return 1;
} }
@ -1549,7 +1587,7 @@ HRESULT WINAPI SHOutOfMemoryMessageBox(DWORD u, DWORD v, DWORD w)
* SHFlushClipboard [SHELL32.121] * SHFlushClipboard [SHELL32.121]
* *
*/ */
HRESULT WINAPI SHFlushClipboard() HRESULT WINAPI SHFlushClipboard(void)
{ FIXME(shell,"stub\n"); { FIXME(shell,"stub\n");
return 1; return 1;
} }
@ -1592,3 +1630,10 @@ LPWSTR WINAPI StrRChrW(LPWSTR lpStart, LPWSTR lpEnd, DWORD wMatch)
} while ( lpStart<=lpEnd ); } while ( lpStart<=lpEnd );
return wptr; return wptr;
} }
/*************************************************************************
* PathProcessCommand [SHELL32.653]
*/
HRESULT WINAPI PathProcessCommand (DWORD u, DWORD v, DWORD w, DWORD x)
{ FIXME(shell,"0x%04lx 0x%04lx 0x%04lx 0x%04lx stub\n",u,v,w,x);
return 0;
}

View File

@ -105,31 +105,32 @@ LPSHELLFOLDER IShellFolder_Constructor(LPSHELLFOLDER pParent,LPITEMIDLIST pidl)
sf=(LPSHELLFOLDER)HeapAlloc(GetProcessHeap(),0,sizeof(IShellFolder)); sf=(LPSHELLFOLDER)HeapAlloc(GetProcessHeap(),0,sizeof(IShellFolder));
sf->ref=1; sf->ref=1;
sf->lpvtbl=&sfvt; sf->lpvtbl=&sfvt;
sf->mlpszFolder=NULL; /* path of the folder */ sf->sMyPath=NULL; /* path of the folder */
sf->pMyPidl=NULL; /* my qualified pidl */
sf->mpSFParent=pParent; /* parrent shellfolder */ sf->mpSFParent=pParent; /* parrent shellfolder */
TRACE(shell,"(%p)->(parent=%p, pidl=%p)\n",sf,pParent, pidl); TRACE(shell,"(%p)->(parent=%p, pidl=%p)\n",sf,pParent, pidl);
/* keep a copy of the pidl in the instance*/ /* keep a copy of the pidl in the instance*/
sf->mpidl = ILClone(pidl); sf->mpidl = ILClone(pidl);
sf->mpidlNSRoot = NULL;
if(sf->mpidl) /* do we have a pidl? */ if(sf->mpidl) /* do we have a pidl? */
{ dwSize = 0; { dwSize = 0;
if(sf->mpSFParent->mlpszFolder) /* get the size of the parents path */ if(sf->mpSFParent->sMyPath) /* get the size of the parents path */
{ dwSize += strlen(sf->mpSFParent->mlpszFolder) + 1; { dwSize += strlen(sf->mpSFParent->sMyPath) + 1;
TRACE(shell,"-- (%p)->(parent's path=%s)\n",sf, debugstr_a(sf->mpSFParent->mlpszFolder)); TRACE(shell,"-- (%p)->(parent's path=%s)\n",sf, debugstr_a(sf->mpSFParent->sMyPath));
} }
dwSize += _ILGetFolderText(sf->mpidl,NULL,0); /* add the size of the foldername*/ dwSize += _ILGetFolderText(sf->mpidl,NULL,0); /* add the size of the foldername*/
sf->mlpszFolder = SHAlloc(dwSize); sf->sMyPath = SHAlloc(dwSize);
if(sf->mlpszFolder) if(sf->sMyPath)
{ *(sf->mlpszFolder)=0x00; { *(sf->sMyPath)=0x00;
if(sf->mpSFParent->mlpszFolder) /* if the parent has a path, get it*/ if(sf->mpSFParent->sMyPath) /* if the parent has a path, get it*/
{ strcpy(sf->mlpszFolder, sf->mpSFParent->mlpszFolder); { strcpy(sf->sMyPath, sf->mpSFParent->sMyPath);
PathAddBackslash32A (sf->mlpszFolder); PathAddBackslash32A (sf->sMyPath);
} }
_ILGetFolderText(sf->mpidl, sf->mlpszFolder+strlen(sf->mlpszFolder), dwSize-strlen(sf->mlpszFolder)); sf->pMyPidl = ILCombine(sf->pMyPidl, pidl);
TRACE(shell,"-- (%p)->(my path=%s)\n",sf, debugstr_a(sf->mlpszFolder)); _ILGetFolderText(sf->mpidl, sf->sMyPath+strlen(sf->sMyPath), dwSize-strlen(sf->sMyPath));
TRACE(shell,"-- (%p)->(my path=%s)\n",sf, debugstr_a(sf->sMyPath));
} }
} }
return sf; return sf;
@ -185,14 +186,14 @@ static ULONG WINAPI IShellFolder_Release(LPSHELLFOLDER this)
{ pdesktopfolder=NULL; { pdesktopfolder=NULL;
TRACE(shell,"-- destroyed IShellFolder(%p) was Desktopfolder\n",this); TRACE(shell,"-- destroyed IShellFolder(%p) was Desktopfolder\n",this);
} }
if(this->mpidlNSRoot) if(this->pMyPidl)
{ SHFree(this->mpidlNSRoot); { SHFree(this->pMyPidl);
} }
if(this->mpidl) if(this->mpidl)
{ SHFree(this->mpidl); { SHFree(this->mpidl);
} }
if(this->mlpszFolder) if(this->sMyPath)
{ SHFree(this->mlpszFolder); { SHFree(this->sMyPath);
} }
HeapFree(GetProcessHeap(),0,this); HeapFree(GetProcessHeap(),0,this);
@ -296,7 +297,7 @@ static HRESULT WINAPI IShellFolder_EnumObjects(
{ TRACE(shell,"(%p)->(HWND=0x%08x flags=0x%08lx pplist=%p)\n",this,hwndOwner,dwFlags,ppEnumIDList); { TRACE(shell,"(%p)->(HWND=0x%08x flags=0x%08lx pplist=%p)\n",this,hwndOwner,dwFlags,ppEnumIDList);
*ppEnumIDList = NULL; *ppEnumIDList = NULL;
*ppEnumIDList = IEnumIDList_Constructor (this->mlpszFolder, dwFlags); *ppEnumIDList = IEnumIDList_Constructor (this->sMyPath, dwFlags);
TRACE(shell,"-- (%p)->(new ID List: %p)\n",this,*ppEnumIDList); TRACE(shell,"-- (%p)->(new ID List: %p)\n",this,*ppEnumIDList);
if(!*ppEnumIDList) if(!*ppEnumIDList)
{ return E_OUTOFMEMORY; { return E_OUTOFMEMORY;
@ -307,15 +308,14 @@ static HRESULT WINAPI IShellFolder_EnumObjects(
* IShellFolder_Initialize() * IShellFolder_Initialize()
* IPersistFolder Method * IPersistFolder Method
*/ */
static HRESULT WINAPI IShellFolder_Initialize( static HRESULT WINAPI IShellFolder_Initialize( LPSHELLFOLDER this,LPCITEMIDLIST pidl)
LPSHELLFOLDER this,
LPCITEMIDLIST pidl)
{ TRACE(shell,"(%p)->(pidl=%p)\n",this,pidl); { TRACE(shell,"(%p)->(pidl=%p)\n",this,pidl);
if(this->mpidlNSRoot)
{ SHFree(this->mpidlNSRoot); if(this->pMyPidl)
this->mpidlNSRoot = NULL; { SHFree(this->pMyPidl);
this->pMyPidl = NULL;
} }
this->mpidlNSRoot=ILClone(pidl); this->pMyPidl = ILClone(pidl);
return S_OK; return S_OK;
} }
@ -327,12 +327,8 @@ static HRESULT WINAPI IShellFolder_Initialize(
* REFIID riid, //[in ] Initial Interface * REFIID riid, //[in ] Initial Interface
* LPVOID* ppvObject //[out] Interface* * LPVOID* ppvObject //[out] Interface*
*/ */
static HRESULT WINAPI IShellFolder_BindToObject( static HRESULT WINAPI IShellFolder_BindToObject( LPSHELLFOLDER this, LPCITEMIDLIST pidl,
LPSHELLFOLDER this, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut)
LPCITEMIDLIST pidl,
LPBC pbcReserved,
REFIID riid,
LPVOID * ppvOut)
{ char xriid[50]; { char xriid[50];
HRESULT hr; HRESULT hr;
LPSHELLFOLDER pShellFolder; LPSHELLFOLDER pShellFolder;
@ -342,11 +338,14 @@ static HRESULT WINAPI IShellFolder_BindToObject(
TRACE(shell,"(%p)->(pidl=%p,%p,\n\tIID:%s,%p)\n",this,pidl,pbcReserved,xriid,ppvOut); TRACE(shell,"(%p)->(pidl=%p,%p,\n\tIID:%s,%p)\n",this,pidl,pbcReserved,xriid,ppvOut);
*ppvOut = NULL; *ppvOut = NULL;
pShellFolder = IShellFolder_Constructor(this, pidl); pShellFolder = IShellFolder_Constructor(this, pidl);
if(!pShellFolder) if(!pShellFolder)
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
/* pShellFolder->lpvtbl->fnInitialize(pShellFolder, this->mpidlNSRoot);*/
IShellFolder_Initialize(pShellFolder, this->mpidlNSRoot); IShellFolder_Initialize(pShellFolder, this->pMyPidl);
hr = pShellFolder->lpvtbl->fnQueryInterface(pShellFolder, riid, ppvOut); hr = pShellFolder->lpvtbl->fnQueryInterface(pShellFolder, riid, ppvOut);
pShellFolder->lpvtbl->fnRelease(pShellFolder); pShellFolder->lpvtbl->fnRelease(pShellFolder);
TRACE(shell,"-- (%p)->(interface=%p)\n",this, ppvOut); TRACE(shell,"-- (%p)->(interface=%p)\n",this, ppvOut);
@ -578,7 +577,7 @@ static HRESULT WINAPI IShellFolder_GetUIObjectOf( LPSHELLFOLDER this,HWND32 hwnd
else if(IsEqualIID(riid, &IID_IExtractIcon)) else if(IsEqualIID(riid, &IID_IExtractIcon))
{ if (cidl != 1) { if (cidl != 1)
return(E_INVALIDARG); return(E_INVALIDARG);
pidl = ILCombine(this->mpidl, apidl[0]); pidl = ILCombine(this->pMyPidl,apidl[0]);
pObj = (LPUNKNOWN)IExtractIcon_Constructor( pidl ); pObj = (LPUNKNOWN)IExtractIcon_Constructor( pidl );
SHFree(pidl); SHFree(pidl);
} }
@ -672,9 +671,9 @@ static HRESULT WINAPI IShellFolder_GetDisplayNameOf( LPSHELLFOLDER this, LPCITEM
{ /* if the IShellFolder has parents, get the path from the { /* if the IShellFolder has parents, get the path from the
parent and add the ItemName*/ parent and add the ItemName*/
szText[0]=0x00; szText[0]=0x00;
if (this->mlpszFolder && strlen (this->mlpszFolder)) if (this->sMyPath && strlen (this->sMyPath))
{ if (strcmp(this->mlpszFolder,"My Computer")) { if (strcmp(this->sMyPath,"My Computer"))
{ strcpy (szText,this->mlpszFolder); { strcpy (szText,this->sMyPath);
PathAddBackslash32A (szText); PathAddBackslash32A (szText);
} }
} }
@ -748,13 +747,13 @@ static BOOL32 WINAPI IShellFolder_GetFolderPath(LPSHELLFOLDER this, LPSTR lpszOu
*lpszOut=0; *lpszOut=0;
if (! this->mlpszFolder) if (! this->sMyPath)
return FALSE; return FALSE;
dwSize = strlen (this->mlpszFolder) +1; dwSize = strlen (this->sMyPath) +1;
if ( dwSize > dwOutSize) if ( dwSize > dwOutSize)
return FALSE; return FALSE;
strcpy(lpszOut, this->mlpszFolder); strcpy(lpszOut, this->sMyPath);
TRACE(shell,"-- (%p)->(return=%s)\n",this, lpszOut); TRACE(shell,"-- (%p)->(return=%s)\n",this, lpszOut);
return TRUE; return TRUE;

View File

@ -253,10 +253,15 @@ HRESULT WINAPI SHGetSpecialFolderLocation(HWND32, INT32, LPITEMIDLIST *);
/**************************************************************************** /****************************************************************************
* string and path functions * string and path functions
*/ */
LPSTR WINAPI PathAddBackslash32A(LPSTR path); LPSTR WINAPI PathAddBackslash32A(LPCSTR path);
LPWSTR WINAPI PathAddBackslash32W(LPWSTR path); LPWSTR WINAPI PathAddBackslash32W(LPCWSTR path);
#define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash) #define PathAddBackslash WINELIB_NAME_AW(PathAddBackslash)
LPVOID WINAPI PathAddBackslash32AW(LPVOID path); LPVOID WINAPI PathAddBackslash32AW(LPCVOID path);
LPSTR WINAPI PathQuoteSpaces32A(LPCSTR path);
LPWSTR WINAPI PathQuoteSpaces32W(LPCWSTR path);
#define PathQuoteSpaces WINELIB_NAME_AW(PathQuoteSpaces)
LPVOID WINAPI PathQuoteSpaces32AW(LPCVOID path);
LPSTR WINAPI PathCombine32A(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile); LPSTR WINAPI PathCombine32A(LPSTR szDest, LPCSTR lpszDir, LPCSTR lpszFile);
LPWSTR WINAPI PathCombine32W(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile); LPWSTR WINAPI PathCombine32W(LPWSTR szDest, LPCWSTR lpszDir, LPCWSTR lpszFile);
@ -278,10 +283,15 @@ LPCWSTR WINAPI PathFindFilename32W(LPCWSTR path);
#define PathFindFilename WINELIB_NAME_AW(PathFindFilename) #define PathFindFilename WINELIB_NAME_AW(PathFindFilename)
LPCVOID WINAPI PathFindFilename32AW(LPCVOID path); LPCVOID WINAPI PathFindFilename32AW(LPCVOID path);
LPSTR WINAPI PathRemoveBlanks(LPSTR str); LPSTR WINAPI PathRemoveBlanks(LPCSTR str);
/**************************************************************************** /****************************************************************************
* other functions * other functions
*/ */
HICON32 WINAPI ExtractIconEx32A ( LPSTR, INT32, HICON32 *, HICON32 *, UINT32 );
HICON32 WINAPI ExtractIconEx32W ( LPWSTR, INT32, HICON32 *, HICON32 *, UINT32 );
#define ExtractIconEx WINELIB_NAME_AW(ExtractIconEx)
HICON32 WINAPI ExtractIconEx32AW ( LPVOID, INT32, HICON32 *, HICON32 *, UINT32 );
LPVOID WINAPI SHAlloc(DWORD len); LPVOID WINAPI SHAlloc(DWORD len);
DWORD WINAPI SHFree(LPVOID x); DWORD WINAPI SHFree(LPVOID x);

View File

@ -534,7 +534,7 @@ typedef enum
{ FVM_ICON = 1, { FVM_ICON = 1,
FVM_SMALLICON = 2, FVM_SMALLICON = 2,
FVM_LIST = 3, FVM_LIST = 3,
FVM_DETAILS = 4, FVM_DETAILS = 4
} FOLDERVIEWMODE; } FOLDERVIEWMODE;
typedef struct typedef struct
@ -626,9 +626,9 @@ typedef struct IShellFolder_VTable {
struct tagSHELLFOLDER { struct tagSHELLFOLDER {
LPSHELLFOLDER_VTABLE lpvtbl; LPSHELLFOLDER_VTABLE lpvtbl;
DWORD ref; DWORD ref;
LPSTR mlpszFolder; LPSTR sMyPath;
LPITEMIDLIST pMyPidl;
LPITEMIDLIST mpidl; LPITEMIDLIST mpidl;
LPITEMIDLIST mpidlNSRoot;
LPSHELLFOLDER mpSFParent; LPSHELLFOLDER mpSFParent;
}; };
@ -677,6 +677,14 @@ DWORD WINAPI SHGetDesktopFolder(LPSHELLFOLDER *);
#define FCT_CONFIGABLE 0x0002 #define FCT_CONFIGABLE 0x0002
#define FCT_ADDTOEND 0x0004 #define FCT_ADDTOEND 0x0004
/* undocumented, found in the web posted by Chris Becke */
#define CWM_SETPATH (WM_USER+2)
#define CWM_WANTIDLE (WM_USER+3)
#define CWM_GETSETCURRENTINFO (WM_USER+4)
#define CWM_SELECTITEM (WM_USER+5)
#define CWM_STOPWAITING (WM_USER+6)
#define CWM_GETISHELLBROWSER (WM_USER+7)
typedef struct IShellBrowser_VTable typedef struct IShellBrowser_VTable
{ // *** IUnknown methods *** { // *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE; STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
@ -703,7 +711,7 @@ typedef struct IShellBrowser_VTable
STDMETHOD(QueryActiveShellView)(THIS_ IShellView ** ppshv) PURE; STDMETHOD(QueryActiveShellView)(THIS_ IShellView ** ppshv) PURE;
STDMETHOD(OnViewWindowActive)(THIS_ IShellView * ppshv) PURE; STDMETHOD(OnViewWindowActive)(THIS_ IShellView * ppshv) PURE;
STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON lpButtons, UINT32 nButtons, UINT32 uFlags) PURE; STDMETHOD(SetToolbarItems)(THIS_ LPTBBUTTON lpButtons, UINT32 nButtons, UINT32 uFlags) PURE;
} *LPSHELLBROWSER_VTABLE,IShellBrowser_VTable;; } *LPSHELLBROWSER_VTABLE,IShellBrowser_VTable;
struct tagSHELLBROWSER struct tagSHELLBROWSER
{ LPSHELLBROWSER_VTABLE lpvtbl; { LPSHELLBROWSER_VTABLE lpvtbl;
@ -742,8 +750,31 @@ struct tagSHELLBROWSER
FCIDM_GLOBAL/LAST for the explorer's submenu IDs FCIDM_GLOBAL/LAST for the explorer's submenu IDs
*/ */
#define FCIDM_SHVIEWFIRST 0x0000 #define FCIDM_SHVIEWFIRST 0x0000
/* undocumented */
#define FCIDM_SHVIEW_ARRANGE 0x7001
#define FCIDM_SHVIEW_DELETE 0x7011
#define FCIDM_SHVIEW_PROPERTIES 0x7013
#define FCIDM_SHVIEW_CUT 0x7018
#define FCIDM_SHVIEW_COPY 0x7019
#define FCIDM_SHVIEW_INSERT 0x701A
#define FCIDM_SHVIEW_UNDO 0x701B
#define FCIDM_SHVIEW_INSERTLINK 0x701C
#define FCIDM_SHVIEW_SELECTALL 0x7021
#define FCIDM_SHVIEW_INVERTSELECTION 0x7022
#define FCIDM_SHVIEW_BIGICON 0x7029
#define FCIDM_SHVIEW_SMALLICON 0x702A
#define FCIDM_SHVIEW_LISTVIEW 0x702B
#define FCIDM_SHVIEW_REPORTVIEW 0x702C
#define FCIDM_SHVIEW_AUTOARRANGE 0x7031
#define FCIDM_SHVIEW_SNAPTOGRID 0x7032
#define FCIDM_SHVIEW_HELP 0x7041
#define FCIDM_SHVIEWLAST 0x7fff #define FCIDM_SHVIEWLAST 0x7fff
#define FCIDM_BROWSERFIRST 0xa000 #define FCIDM_BROWSERFIRST 0xA000
/* undocumented toolbar items from stddlg's*/
#define FCIDM_TB_SMALLICON 0xA003
#define FCIDM_TB_REPORTVIEW 0xA004
#define FCIDM_BROWSERLAST 0xbf00 #define FCIDM_BROWSERLAST 0xbf00
#define FCIDM_GLOBALFIRST 0x8000 #define FCIDM_GLOBALFIRST 0x8000
#define FCIDM_GLOBALLAST 0x9fff #define FCIDM_GLOBALLAST 0x9fff
@ -953,6 +984,9 @@ struct IExtractIcon
}; };
#undef THIS #undef THIS
DWORD WINAPI SHMapPIDLToSystemImageListIndex(LPSHELLFOLDER sh,LPITEMIDLIST pidl,DWORD z);
/**************************************************************************** /****************************************************************************
* IShellIcon interface * IShellIcon interface
*/ */
@ -1026,14 +1060,14 @@ struct tagSERVICEPROVIDER
* Class constructors * Class constructors
*/ */
#ifdef __WINE__ #ifdef __WINE__
extern LPDATAOBJECT IDataObject_Constructor(); extern LPDATAOBJECT IDataObject_Constructor(HWND32 hwndOwner, LPSHELLFOLDER psf, LPITEMIDLIST * apidl, UINT32 cidl);
extern LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT32, const FORMATETC32 []); extern LPENUMFORMATETC IEnumFORMATETC_Constructor(UINT32, const FORMATETC32 []);
extern LPCLASSFACTORY IClassFactory_Constructor(); extern LPCLASSFACTORY IClassFactory_Constructor(void);
extern LPCONTEXTMENU IContextMenu_Constructor(LPSHELLFOLDER, LPCITEMIDLIST *, UINT32); extern LPCONTEXTMENU IContextMenu_Constructor(LPSHELLFOLDER, LPCITEMIDLIST *, UINT32);
extern LPSHELLFOLDER IShellFolder_Constructor(LPSHELLFOLDER,LPITEMIDLIST); extern LPSHELLFOLDER IShellFolder_Constructor(LPSHELLFOLDER,LPITEMIDLIST);
extern LPSHELLVIEW IShellView_Constructor(LPSHELLFOLDER, LPCITEMIDLIST); extern LPSHELLVIEW IShellView_Constructor(LPSHELLFOLDER, LPCITEMIDLIST);
extern LPSHELLLINK IShellLink_Constructor(); extern LPSHELLLINK IShellLink_Constructor(void);
extern LPENUMIDLIST IEnumIDList_Constructor(LPCSTR,DWORD); extern LPENUMIDLIST IEnumIDList_Constructor(LPCSTR,DWORD);
extern LPEXTRACTICON IExtractIcon_Constructor(LPITEMIDLIST); extern LPEXTRACTICON IExtractIcon_Constructor(LPITEMIDLIST);
#endif #endif

View File

@ -471,17 +471,18 @@ BOOL16 WINAPI ShellAbout16( HWND16 hWnd, LPCSTR szApp, LPCSTR szOtherStuff,
* SHELL_GetResourceTable * SHELL_GetResourceTable
*/ */
static DWORD SHELL_GetResourceTable(HFILE32 hFile,LPBYTE *retptr) static DWORD SHELL_GetResourceTable(HFILE32 hFile,LPBYTE *retptr)
{ { IMAGE_DOS_HEADER mz_header;
IMAGE_DOS_HEADER mz_header;
char magic[4]; char magic[4];
int size; int size;
TRACE(shell,"\n"); TRACE(shell,"\n");
*retptr = NULL; *retptr = NULL;
_llseek32( hFile, 0, SEEK_SET ); _llseek32( hFile, 0, SEEK_SET );
if ( (_lread32(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) || if ((_lread32(hFile,&mz_header,sizeof(mz_header)) != sizeof(mz_header)) || (mz_header.e_magic != IMAGE_DOS_SIGNATURE))
(mz_header.e_magic != IMAGE_DOS_SIGNATURE) { /* .ICO file ? */
) { /* .ICO file ? */ if (mz_header.e_cblp == 1)
if (mz_header.e_cblp == 1) { /* ICONHEADER.idType, must be 1 */ { /* ICONHEADER.idType, must be 1 */
*retptr = (LPBYTE)-1; *retptr = (LPBYTE)-1;
return 1; return 1;
} }
@ -489,35 +490,40 @@ static DWORD SHELL_GetResourceTable(HFILE32 hFile,LPBYTE *retptr)
return 0; /* failed */ return 0; /* failed */
} }
_llseek32( hFile, mz_header.e_lfanew, SEEK_SET ); _llseek32( hFile, mz_header.e_lfanew, SEEK_SET );
if (_lread32( hFile, magic, sizeof(magic) ) != sizeof(magic)) if (_lread32( hFile, magic, sizeof(magic) ) != sizeof(magic))
return 0; return 0;
_llseek32( hFile, mz_header.e_lfanew, SEEK_SET); _llseek32( hFile, mz_header.e_lfanew, SEEK_SET);
if (*(DWORD*)magic == IMAGE_NT_SIGNATURE) if (*(DWORD*)magic == IMAGE_NT_SIGNATURE)
return IMAGE_NT_SIGNATURE; return IMAGE_NT_SIGNATURE;
if (*(WORD*)magic == IMAGE_OS2_SIGNATURE) {
IMAGE_OS2_HEADER ne_header; if (*(WORD*)magic == IMAGE_OS2_SIGNATURE)
{ IMAGE_OS2_HEADER ne_header;
LPBYTE pTypeInfo = (LPBYTE)-1; LPBYTE pTypeInfo = (LPBYTE)-1;
if (_lread32(hFile,&ne_header,sizeof(ne_header))!=sizeof(ne_header)) if (_lread32(hFile,&ne_header,sizeof(ne_header))!=sizeof(ne_header))
return 0; return 0;
if (ne_header.ne_magic != IMAGE_OS2_SIGNATURE) return 0; if (ne_header.ne_magic != IMAGE_OS2_SIGNATURE)
return 0;
size = ne_header.rname_tab_offset - ne_header.resource_tab_offset; size = ne_header.rname_tab_offset - ne_header.resource_tab_offset;
if( size > sizeof(NE_TYPEINFO) ) if( size > sizeof(NE_TYPEINFO) )
{ { pTypeInfo = (BYTE*)HeapAlloc( GetProcessHeap(), 0, size);
pTypeInfo = (BYTE*)HeapAlloc( GetProcessHeap(), 0, size); if( pTypeInfo )
if( pTypeInfo ) { { _llseek32(hFile, mz_header.e_lfanew+ne_header.resource_tab_offset, SEEK_SET);
_llseek32(hFile, mz_header.e_lfanew+ne_header.resource_tab_offset, SEEK_SET); if( _lread32( hFile, (char*)pTypeInfo, size) != size )
if( _lread32( hFile, (char*)pTypeInfo, size) != size ) { { HeapFree( GetProcessHeap(), 0, pTypeInfo);
HeapFree( GetProcessHeap(), 0, pTypeInfo);
pTypeInfo = NULL; pTypeInfo = NULL;
} }
} }
} }
*retptr = pTypeInfo; *retptr = pTypeInfo;
return IMAGE_OS2_SIGNATURE; return IMAGE_OS2_SIGNATURE;
} else }
return 0; /* failed */ return 0; /* failed */
} }
@ -527,7 +533,9 @@ static DWORD SHELL_GetResourceTable(HFILE32 hFile,LPBYTE *retptr)
static HGLOBAL16 SHELL_LoadResource(HINSTANCE16 hInst, HFILE32 hFile, NE_NAMEINFO* pNInfo, WORD sizeShift) static HGLOBAL16 SHELL_LoadResource(HINSTANCE16 hInst, HFILE32 hFile, NE_NAMEINFO* pNInfo, WORD sizeShift)
{ BYTE* ptr; { BYTE* ptr;
HGLOBAL16 handle = DirectResAlloc( hInst, 0x10, (DWORD)pNInfo->length << sizeShift); HGLOBAL16 handle = DirectResAlloc( hInst, 0x10, (DWORD)pNInfo->length << sizeShift);
TRACE(shell,"\n"); TRACE(shell,"\n");
if( (ptr = (BYTE*)GlobalLock16( handle )) ) if( (ptr = (BYTE*)GlobalLock16( handle )) )
{ _llseek32( hFile, (DWORD)pNInfo->offset << sizeShift, SEEK_SET); { _llseek32( hFile, (DWORD)pNInfo->offset << sizeShift, SEEK_SET);
_lread32( hFile, (char*)ptr, pNInfo->length << sizeShift); _lread32( hFile, (char*)ptr, pNInfo->length << sizeShift);
@ -605,16 +613,16 @@ static HGLOBAL16 ICO_GetIconDirectory(HINSTANCE16 hInst, HFILE32 hFile, LPicoICO
* This abortion is called directly by Progman * This abortion is called directly by Progman
*/ */
HGLOBAL16 WINAPI InternalExtractIcon(HINSTANCE16 hInstance, HGLOBAL16 WINAPI InternalExtractIcon(HINSTANCE16 hInstance,
LPCSTR lpszExeFileName, UINT16 nIconIndex, LPCSTR lpszExeFileName, UINT16 nIconIndex, WORD n )
WORD n ) { HGLOBAL16 hRet = 0;
{
HGLOBAL16 hRet = 0;
HGLOBAL16* RetPtr = NULL; HGLOBAL16* RetPtr = NULL;
LPBYTE pData; LPBYTE pData;
OFSTRUCT ofs; OFSTRUCT ofs;
DWORD sig; DWORD sig;
HFILE32 hFile = OpenFile32( lpszExeFileName, &ofs, OF_READ ); HFILE32 hFile = OpenFile32( lpszExeFileName, &ofs, OF_READ );
UINT16 iconDirCount = 0,iconCount = 0; UINT16 iconDirCount = 0,iconCount = 0;
LPBYTE peimage;
HANDLE32 fmapping;
TRACE(shell,"(%04x,file %s,start %d,extract %d\n", TRACE(shell,"(%04x,file %s,start %d,extract %d\n",
hInstance, lpszExeFileName, nIconIndex, n); hInstance, lpszExeFileName, nIconIndex, n);
@ -629,35 +637,27 @@ HGLOBAL16 WINAPI InternalExtractIcon(HINSTANCE16 hInstance,
sig = SHELL_GetResourceTable(hFile,&pData); sig = SHELL_GetResourceTable(hFile,&pData);
if((sig == IMAGE_OS2_SIGNATURE) if( sig==IMAGE_OS2_SIGNATURE || sig==1 ) /* .ICO file */
|| (sig == 1)) /* .ICO file */ { HICON16 hIcon = 0;
{
HICON16 hIcon = 0;
NE_TYPEINFO* pTInfo = (NE_TYPEINFO*)(pData + 2); NE_TYPEINFO* pTInfo = (NE_TYPEINFO*)(pData + 2);
NE_NAMEINFO* pIconStorage = NULL; NE_NAMEINFO* pIconStorage = NULL;
NE_NAMEINFO* pIconDir = NULL; NE_NAMEINFO* pIconDir = NULL;
LPicoICONDIR lpiID = NULL; LPicoICONDIR lpiID = NULL;
if( pData == (BYTE*)-1 ) if( pData == (BYTE*)-1 )
{ { hIcon = ICO_GetIconDirectory(hInstance, hFile, &lpiID); /* check for .ICO file */
/* check for .ICO file */ if( hIcon )
{ iconDirCount = 1; iconCount = lpiID->idCount;
hIcon = ICO_GetIconDirectory(hInstance, hFile, &lpiID); }
if( hIcon ) { iconDirCount = 1; iconCount = lpiID->idCount; }
} }
else while( pTInfo->type_id && !(pIconStorage && pIconDir) ) else while( pTInfo->type_id && !(pIconStorage && pIconDir) )
{ { if( pTInfo->type_id == NE_RSCTYPE_GROUP_ICON ) /* find icon directory and icon repository */
/* find icon directory and icon repository */ { iconDirCount = pTInfo->count;
if( pTInfo->type_id == NE_RSCTYPE_GROUP_ICON )
{
iconDirCount = pTInfo->count;
pIconDir = ((NE_NAMEINFO*)(pTInfo + 1)); pIconDir = ((NE_NAMEINFO*)(pTInfo + 1));
TRACE(shell,"\tfound directory - %i icon families\n", iconDirCount); TRACE(shell,"\tfound directory - %i icon families\n", iconDirCount);
} }
if( pTInfo->type_id == NE_RSCTYPE_ICON ) if( pTInfo->type_id == NE_RSCTYPE_ICON )
{ { iconCount = pTInfo->count;
iconCount = pTInfo->count;
pIconStorage = ((NE_NAMEINFO*)(pTInfo + 1)); pIconStorage = ((NE_NAMEINFO*)(pTInfo + 1));
TRACE(shell,"\ttotal icons - %i\n", iconCount); TRACE(shell,"\ttotal icons - %i\n", iconCount);
} }
@ -667,212 +667,205 @@ HGLOBAL16 WINAPI InternalExtractIcon(HINSTANCE16 hInstance,
/* load resources and create icons */ /* load resources and create icons */
if( (pIconStorage && pIconDir) || lpiID ) if( (pIconStorage && pIconDir) || lpiID )
{ { if( nIconIndex == (UINT16)-1 )
if( nIconIndex == (UINT16)-1 ) RetPtr[0] = iconDirCount; { RetPtr[0] = iconDirCount;
}
else if( nIconIndex < iconDirCount ) else if( nIconIndex < iconDirCount )
{ { UINT16 i, icon;
UINT16 i, icon; if( n > iconDirCount - nIconIndex )
n = iconDirCount - nIconIndex;
if( n > iconDirCount - nIconIndex ) n = iconDirCount - nIconIndex;
for( i = nIconIndex; i < nIconIndex + n; i++ ) for( i = nIconIndex; i < nIconIndex + n; i++ )
{ { /* .ICO files have only one icon directory */
/* .ICO files have only one icon directory */
if( lpiID == NULL ) if( lpiID == NULL )
hIcon = SHELL_LoadResource( hInstance, hFile, pIconDir + i, hIcon = SHELL_LoadResource( hInstance, hFile, pIconDir + i, *(WORD*)pData );
*(WORD*)pData );
RetPtr[i-nIconIndex] = GetIconID( hIcon, 3 ); RetPtr[i-nIconIndex] = GetIconID( hIcon, 3 );
GlobalFree16(hIcon); GlobalFree16(hIcon);
} }
for( icon = nIconIndex; icon < nIconIndex + n; icon++ ) for( icon = nIconIndex; icon < nIconIndex + n; icon++ )
{ { hIcon = 0;
hIcon = 0;
if( lpiID ) if( lpiID )
hIcon = ICO_LoadIcon( hInstance, hFile, { hIcon = ICO_LoadIcon( hInstance, hFile, lpiID->idEntries + RetPtr[icon-nIconIndex]);
lpiID->idEntries + RetPtr[icon-nIconIndex]); }
else else
for( i = 0; i < iconCount; i++ ) { for( i = 0; i < iconCount; i++ )
if( pIconStorage[i].id == (RetPtr[icon-nIconIndex] | 0x8000) ) { if( pIconStorage[i].id == (RetPtr[icon-nIconIndex] | 0x8000) )
hIcon = SHELL_LoadResource( hInstance, hFile, pIconStorage + i, { hIcon = SHELL_LoadResource( hInstance, hFile, pIconStorage + i,*(WORD*)pData );
*(WORD*)pData ); }
}
}
if( hIcon ) if( hIcon )
{ { RetPtr[icon-nIconIndex] = LoadIconHandler( hIcon, TRUE );
RetPtr[icon-nIconIndex] = LoadIconHandler( hIcon, TRUE );
FarSetOwner( RetPtr[icon-nIconIndex], GetExePtr(hInstance) ); FarSetOwner( RetPtr[icon-nIconIndex], GetExePtr(hInstance) );
} }
else else
RetPtr[icon-nIconIndex] = 0; { RetPtr[icon-nIconIndex] = 0;
} }
} }
} }
if( lpiID ) HeapFree( GetProcessHeap(), 0, lpiID);
else HeapFree( GetProcessHeap(), 0, pData);
} }
if( lpiID )
HeapFree( GetProcessHeap(), 0, lpiID);
else
HeapFree( GetProcessHeap(), 0, pData);
}
if( sig == IMAGE_NT_SIGNATURE) if( sig == IMAGE_NT_SIGNATURE)
{ { LPBYTE idata,igdata;
LPBYTE peimage,idata,igdata;
PIMAGE_DOS_HEADER dheader; PIMAGE_DOS_HEADER dheader;
PIMAGE_NT_HEADERS pe_header; PIMAGE_NT_HEADERS pe_header;
PIMAGE_SECTION_HEADER pe_sections; PIMAGE_SECTION_HEADER pe_sections;
PIMAGE_RESOURCE_DIRECTORY rootresdir,iconresdir,icongroupresdir; PIMAGE_RESOURCE_DIRECTORY rootresdir,iconresdir,icongroupresdir;
PIMAGE_RESOURCE_DATA_ENTRY idataent,igdataent; PIMAGE_RESOURCE_DATA_ENTRY idataent,igdataent;
HANDLE32 fmapping;
int i,j; int i,j;
PIMAGE_RESOURCE_DIRECTORY_ENTRY xresent; PIMAGE_RESOURCE_DIRECTORY_ENTRY xresent;
CURSORICONDIR **cids; CURSORICONDIR **cids;
fmapping = CreateFileMapping32A(hFile,NULL,PAGE_READONLY|SEC_COMMIT,0,0,NULL); fmapping = CreateFileMapping32A(hFile,NULL,PAGE_READONLY|SEC_COMMIT,0,0,NULL);
if (fmapping == 0) { /* FIXME, INVALID_HANDLE_VALUE? */ if (fmapping == 0)
{ /* FIXME, INVALID_HANDLE_VALUE? */
WARN(shell,"failed to create filemap.\n"); WARN(shell,"failed to create filemap.\n");
_lclose32( hFile); hRet = 0;
return 0; goto end_2; /* failure */
} }
peimage = MapViewOfFile(fmapping,FILE_MAP_READ,0,0,0); peimage = MapViewOfFile(fmapping,FILE_MAP_READ,0,0,0);
if (!peimage) { if (!peimage)
WARN(shell,"failed to mmap filemap.\n"); { WARN(shell,"failed to mmap filemap.\n");
CloseHandle(fmapping); hRet = 0;
_lclose32( hFile); goto end_2; /* failure */
return 0;
} }
dheader = (PIMAGE_DOS_HEADER)peimage; dheader = (PIMAGE_DOS_HEADER)peimage;
/* it is a pe header, SHELL_GetResourceTable checked that */ /* it is a pe header, SHELL_GetResourceTable checked that */
pe_header = (PIMAGE_NT_HEADERS)(peimage+dheader->e_lfanew); pe_header = (PIMAGE_NT_HEADERS)(peimage+dheader->e_lfanew);
/* probably makes problems with short PE headers... but I haven't seen /* probably makes problems with short PE headers... but I haven't seen
* one yet... * one yet...
*/ */
pe_sections = (PIMAGE_SECTION_HEADER)(((char*)pe_header)+sizeof(*pe_header)); pe_sections = (PIMAGE_SECTION_HEADER)(((char*)pe_header)+sizeof(*pe_header));
rootresdir = NULL; rootresdir = NULL;
for (i=0;i<pe_header->FileHeader.NumberOfSections;i++) {
if (pe_sections[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA) for (i=0;i<pe_header->FileHeader.NumberOfSections;i++)
{ if (pe_sections[i].Characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA)
continue; continue;
/* FIXME: doesn't work when the resources are not in a seperate section */ /* FIXME: doesn't work when the resources are not in a seperate section */
if (pe_sections[i].VirtualAddress == pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress) { if (pe_sections[i].VirtualAddress == pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_RESOURCE].VirtualAddress)
rootresdir = (PIMAGE_RESOURCE_DIRECTORY)((char*)peimage+pe_sections[i].PointerToRawData); { rootresdir = (PIMAGE_RESOURCE_DIRECTORY)((char*)peimage+pe_sections[i].PointerToRawData);
break; break;
} }
} }
if (!rootresdir) { if (!rootresdir)
WARN(shell,"haven't found section for resource directory.\n"); { WARN(shell,"haven't found section for resource directory.\n");
UnmapViewOfFile(peimage); goto end_4; /* failure */
CloseHandle(fmapping);
_lclose32( hFile);
return 0;
} }
icongroupresdir = GetResDirEntryW(rootresdir,RT_GROUP_ICON32W,
(DWORD)rootresdir,FALSE); icongroupresdir = GetResDirEntryW(rootresdir,RT_GROUP_ICON32W, (DWORD)rootresdir,FALSE);
if (!icongroupresdir) {
WARN(shell,"No Icongroupresourcedirectory!\n"); if (!icongroupresdir)
UnmapViewOfFile(peimage); { WARN(shell,"No Icongroupresourcedirectory!\n");
CloseHandle(fmapping); goto end_4; /* failure */
_lclose32( hFile);
return 0;
} }
iconDirCount = icongroupresdir->NumberOfNamedEntries+icongroupresdir->NumberOfIdEntries; iconDirCount = icongroupresdir->NumberOfNamedEntries+icongroupresdir->NumberOfIdEntries;
if( nIconIndex == (UINT16)-1 ) {
RetPtr[0] = iconDirCount; if( nIconIndex == (UINT16)-1 )
UnmapViewOfFile(peimage); { RetPtr[0] = iconDirCount;
CloseHandle(fmapping); goto end_3; /* success */
_lclose32( hFile);
return hRet;
} }
if (nIconIndex >= iconDirCount) { if (nIconIndex >= iconDirCount)
WARN(shell,"nIconIndex %d is larger than iconDirCount %d\n", { WARN(shell,"nIconIndex %d is larger than iconDirCount %d\n",nIconIndex,iconDirCount);
nIconIndex,iconDirCount);
UnmapViewOfFile(peimage);
CloseHandle(fmapping);
_lclose32( hFile);
GlobalFree16(hRet); GlobalFree16(hRet);
return 0; goto end_4; /* failure */
} }
cids = (CURSORICONDIR**)HeapAlloc(GetProcessHeap(),0,n*sizeof(CURSORICONDIR*)); cids = (CURSORICONDIR**)HeapAlloc(GetProcessHeap(),0,n*sizeof(CURSORICONDIR*));
/* caller just wanted the number of entries */ /* caller just wanted the number of entries */
xresent = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(icongroupresdir+1); xresent = (PIMAGE_RESOURCE_DIRECTORY_ENTRY)(icongroupresdir+1);
/* assure we don't get too much ... */ /* assure we don't get too much ... */
if( n > iconDirCount - nIconIndex ) n = iconDirCount - nIconIndex; if( n > iconDirCount - nIconIndex )
{ n = iconDirCount - nIconIndex;
}
/* starting from specified index ... */ /* starting from specified index ... */
xresent = xresent+nIconIndex; xresent = xresent+nIconIndex;
for (i=0;i<n;i++,xresent++) { for (i=0;i<n;i++,xresent++)
CURSORICONDIR *cid; { CURSORICONDIR *cid;
PIMAGE_RESOURCE_DIRECTORY resdir; PIMAGE_RESOURCE_DIRECTORY resdir;
/* go down this resource entry, name */ /* go down this resource entry, name */
resdir = (PIMAGE_RESOURCE_DIRECTORY)((DWORD)rootresdir+(xresent->u2.s.OffsetToDirectory)); resdir = (PIMAGE_RESOURCE_DIRECTORY)((DWORD)rootresdir+(xresent->u2.s.OffsetToDirectory));
/* default language (0) */ /* default language (0) */
resdir = GetResDirEntryW(resdir,(LPWSTR)0,(DWORD)rootresdir,TRUE); resdir = GetResDirEntryW(resdir,(LPWSTR)0,(DWORD)rootresdir,TRUE);
igdataent = (PIMAGE_RESOURCE_DATA_ENTRY)resdir; igdataent = (PIMAGE_RESOURCE_DATA_ENTRY)resdir;
/* lookup address in mapped image for virtual address */ /* lookup address in mapped image for virtual address */
igdata = NULL; igdata = NULL;
for (j=0;j<pe_header->FileHeader.NumberOfSections;j++) {
if (igdataent->OffsetToData < pe_sections[j].VirtualAddress) for (j=0;j<pe_header->FileHeader.NumberOfSections;j++)
{ if (igdataent->OffsetToData < pe_sections[j].VirtualAddress)
continue; continue;
if (igdataent->OffsetToData+igdataent->Size > pe_sections[j].VirtualAddress+pe_sections[j].SizeOfRawData) if (igdataent->OffsetToData+igdataent->Size > pe_sections[j].VirtualAddress+pe_sections[j].SizeOfRawData)
continue; continue;
igdata = peimage+(igdataent->OffsetToData-pe_sections[j].VirtualAddress+pe_sections[j].PointerToRawData); igdata = peimage+(igdataent->OffsetToData-pe_sections[j].VirtualAddress+pe_sections[j].PointerToRawData);
} }
if (!igdata) {
WARN(shell,"no matching real address for icongroup!\n"); if (!igdata)
UnmapViewOfFile(peimage); { WARN(shell,"no matching real address for icongroup!\n");
CloseHandle(fmapping); goto end_4; /* failure */
_lclose32( hFile);
return 0;
} }
/* found */ /* found */
cid = (CURSORICONDIR*)igdata; cid = (CURSORICONDIR*)igdata;
cids[i] = cid; cids[i] = cid;
RetPtr[i] = LookupIconIdFromDirectoryEx32(igdata,TRUE,SYSMETRICS_CXICON,SYSMETRICS_CYICON,0); RetPtr[i] = LookupIconIdFromDirectoryEx32(igdata,TRUE,SYSMETRICS_CXICON,SYSMETRICS_CYICON,0);
} }
iconresdir=GetResDirEntryW(rootresdir,RT_ICON32W,
(DWORD)rootresdir,FALSE); iconresdir=GetResDirEntryW(rootresdir,RT_ICON32W,(DWORD)rootresdir,FALSE);
if (!iconresdir) {
WARN(shell,"No Iconresourcedirectory!\n"); if (!iconresdir)
UnmapViewOfFile(peimage); { WARN(shell,"No Iconresourcedirectory!\n");
CloseHandle(fmapping); goto end_4; /* failure */
_lclose32( hFile);
return 0;
} }
for (i=0;i<n;i++) {
PIMAGE_RESOURCE_DIRECTORY xresdir;
xresdir = GetResDirEntryW(iconresdir,(LPWSTR)RetPtr[i],(DWORD)rootresdir,FALSE); for (i=0;i<n;i++)
{ PIMAGE_RESOURCE_DIRECTORY xresdir;
xresdir = GetResDirEntryW(iconresdir,(LPWSTR)(DWORD)RetPtr[i],(DWORD)rootresdir,FALSE);
xresdir = GetResDirEntryW(xresdir,(LPWSTR)0,(DWORD)rootresdir,TRUE); xresdir = GetResDirEntryW(xresdir,(LPWSTR)0,(DWORD)rootresdir,TRUE);
idataent = (PIMAGE_RESOURCE_DATA_ENTRY)xresdir; idataent = (PIMAGE_RESOURCE_DATA_ENTRY)xresdir;
idata = NULL; idata = NULL;
/* map virtual to address in image */ /* map virtual to address in image */
for (j=0;j<pe_header->FileHeader.NumberOfSections;j++) { for (j=0;j<pe_header->FileHeader.NumberOfSections;j++)
if (idataent->OffsetToData < pe_sections[j].VirtualAddress) { if (idataent->OffsetToData < pe_sections[j].VirtualAddress)
continue; continue;
if (idataent->OffsetToData+idataent->Size > pe_sections[j].VirtualAddress+pe_sections[j].SizeOfRawData) if (idataent->OffsetToData+idataent->Size > pe_sections[j].VirtualAddress+pe_sections[j].SizeOfRawData)
continue; continue;
idata = peimage+(idataent->OffsetToData-pe_sections[j].VirtualAddress+pe_sections[j].PointerToRawData); idata = peimage+(idataent->OffsetToData-pe_sections[j].VirtualAddress+pe_sections[j].PointerToRawData);
} }
if (!idata) { if (!idata)
WARN(shell,"no matching real address found for icondata!\n"); { WARN(shell,"no matching real address found for icondata!\n");
RetPtr[i]=0; RetPtr[i]=0;
continue; continue;
} }
RetPtr[i] = CreateIconFromResourceEx32(idata,idataent->Size,TRUE,0x00030000,SYSMETRICS_CXICON,SYSMETRICS_CYICON,0); RetPtr[i] = CreateIconFromResourceEx32(idata,idataent->Size,TRUE,0x00030000,SYSMETRICS_CXICON,SYSMETRICS_CYICON,0);
} }
UnmapViewOfFile(peimage); goto end_3; /* sucess */
CloseHandle(fmapping);
_lclose32( hFile);
return hRet;
} }
_lclose32( hFile ); goto end_1; /* return array with icon handles */
/* return array with icon handles */
return hRet;
/* cleaning up (try & catch would be nicer) */
end_4: hRet = 0; /* failure */
end_3: UnmapViewOfFile(peimage); /* success */
end_2: CloseHandle(fmapping);
end_1: _lclose32( hFile);
return hRet;
} }
/************************************************************************* /*************************************************************************
@ -892,14 +885,12 @@ HICON16 WINAPI ExtractIcon16( HINSTANCE16 hInstance, LPCSTR lpszExeFileName,
* Return icon for given file (either from file itself or from associated * Return icon for given file (either from file itself or from associated
* executable) and patch parameters if needed. * executable) and patch parameters if needed.
*/ */
HICON32 WINAPI ExtractAssociatedIcon32A(HINSTANCE32 hInst,LPSTR lpIconPath, HICON32 WINAPI ExtractAssociatedIcon32A(HINSTANCE32 hInst, LPSTR lpIconPath, LPWORD lpiIcon)
LPWORD lpiIcon)
{ TRACE(shell,"\n"); { TRACE(shell,"\n");
return ExtractAssociatedIcon16(hInst,lpIconPath,lpiIcon); return ExtractAssociatedIcon16(hInst,lpIconPath,lpiIcon);
} }
HICON16 WINAPI ExtractAssociatedIcon16(HINSTANCE16 hInst,LPSTR lpIconPath, HICON16 WINAPI ExtractAssociatedIcon16(HINSTANCE16 hInst, LPSTR lpIconPath, LPWORD lpiIcon)
LPWORD lpiIcon)
{ HICON16 hIcon; { HICON16 hIcon;
TRACE(shell,"\n"); TRACE(shell,"\n");

View File

@ -8,18 +8,18 @@ init Shell32LibMain
# This list was updated to dll version 4.72 # This list was updated to dll version 4.72
2 stdcall SHChangeNotifyRegister(long long long long long long) SHChangeNotifyRegister 2 stdcall SHChangeNotifyRegister(long long long long long long) SHChangeNotifyRegister
3 stub CheckEscapesA # exported by name 3 stub CheckEscapesA@8
4 stdcall SHChangeNotifyDeregister (long long) SHChangeNotifyDeregister 4 stdcall SHChangeNotifyDeregister (long long) SHChangeNotifyDeregister
5 stub SHChangeNotifyUpdateEntryList@16 5 stub SHChangeNotifyUpdateEntryList@16
6 stub CheckEscapesW # exported by name 6 stub CheckEscapesW@8
7 stdcall CommandLineToArgvW(wstr ptr) CommandLineToArgvW # exported by name 7 stdcall CommandLineToArgvW(wstr ptr) CommandLineToArgvW
8 stub Control_FillCache_RunDLL@16 # exported by name 8 stub Control_FillCache_RunDLL@16
9 stub PifMgr_OpenProperties@16 9 stub PifMgr_OpenProperties@16
10 stub PifMgr_GetProperties@20 10 stub PifMgr_GetProperties@20
11 stub PifMgr_SetProperties@20 11 stub PifMgr_SetProperties@20
12 stub Control_FillCache_RunDLLA # exported by name 12 stub Control_FillCache_RunDLLA@16
13 stub PifMgr_CloseProperties@8 13 stub PifMgr_CloseProperties@8
14 stub Control_FillCache_RunDLLW@16 # exported by name 14 stub Control_FillCache_RunDLLW@16
15 stdcall ILGetDisplayName(ptr ptr) ILGetDisplayName 15 stdcall ILGetDisplayName(ptr ptr) ILGetDisplayName
16 stdcall ILFindLastID(ptr) ILFindLastID 16 stdcall ILFindLastID(ptr) ILFindLastID
17 stdcall ILRemoveLastID(ptr) ILRemoveLastID 17 stdcall ILRemoveLastID(ptr) ILRemoveLastID
@ -28,7 +28,7 @@ init Shell32LibMain
20 stub ILGlobalClone@4 20 stub ILGlobalClone@4
21 stdcall ILIsEqual (ptr ptr) ILIsEqual 21 stdcall ILIsEqual (ptr ptr) ILIsEqual
22 stdcall Control_RunDLL(long long long long) Control_RunDLL # exported by name 22 stdcall Control_RunDLL(long long long long) Control_RunDLL # exported by name
23 stub ILIsParent@12 23 stdcall ILIsParent (long long long) ILIsParent
24 stdcall ILFindChild (long long) ILFindChild 24 stdcall ILFindChild (long long) ILFindChild
25 stdcall ILCombine(ptr ptr) ILCombine 25 stdcall ILCombine(ptr ptr) ILCombine
26 stub ILLoadFromStream@8 26 stub ILLoadFromStream@8
@ -45,26 +45,26 @@ init Shell32LibMain
37 stdcall PathCombine(ptr ptr ptr) PathCombine32AW 37 stdcall PathCombine(ptr ptr ptr) PathCombine32AW
38 stub PathStripPath 38 stub PathStripPath
39 stdcall PathIsUNC(str) PathIsUNC 39 stdcall PathIsUNC(str) PathIsUNC
40 stub PathIsRelative 40 stub PathIsRelative@4
41 stub Control_RunDLLA # exported by name 41 stub Control_RunDLLA@16
42 stub Control_RunDLLW # exported by name 42 stub Control_RunDLLW@16
43 stdcall PathIsExe (ptr) PathIsExe 43 stdcall PathIsExe (ptr) PathIsExe
44 stub DoEnvironmentSubstA # exported by name 44 stub DoEnvironmentSubstA@8
45 stdcall PathFileExists(str) PathFileExists 45 stdcall PathFileExists(str) PathFileExists
46 stdcall PathMatchSpec (str str) PathMatchSpec 46 stdcall PathMatchSpec (str str) PathMatchSpec
47 stub PathMakeUniqueName@20 47 stub PathMakeUniqueName@20
48 stub PathSetDlgItemPath@12 48 stub PathSetDlgItemPath@12
49 stub PathQualify@4 49 stub PathQualify@4
50 stub PathStripToRoot 50 stub PathStripToRoot@4
51 stdcall PathResolve(str long long) PathResolve 51 stdcall PathResolve(str long long) PathResolve
52 stdcall PathGetArgs(str) PathGetArgs 52 stdcall PathGetArgs(str) PathGetArgs
53 stub DoEnvironmentSubstW@8 # exported by name 53 stub DoEnvironmentSubstW@8
54 stdcall DragAcceptFiles(long long) DragAcceptFiles32 54 stdcall DragAcceptFiles(long long) DragAcceptFiles32
55 stub PathQuoteSpaces 55 stdcall PathQuoteSpaces (ptr) PathQuoteSpaces32AW
56 stdcall PathUnquoteSpaces(str) PathUnquoteSpaces 56 stdcall PathUnquoteSpaces(str) PathUnquoteSpaces
57 stdcall PathGetDriveNumber (str) PathGetDriveNumber32 57 stdcall PathGetDriveNumber (str) PathGetDriveNumber32
58 stdcall ParseField(str long str long) ParseField 58 stdcall ParseField(str long str long) ParseField
59 stub RestartDialog 59 stub RestartDialog@12
60 stdcall ExitWindowsDialog(long) ExitWindowsDialog 60 stdcall ExitWindowsDialog(long) ExitWindowsDialog
61 stdcall RunFileDlg(long long long str str long) RunFileDlg 61 stdcall RunFileDlg(long long long str str long) RunFileDlg
62 stdcall PickIconDlg(long long long long) PickIconDlg 62 stdcall PickIconDlg(long long long long) PickIconDlg
@ -194,9 +194,9 @@ init Shell32LibMain
186 stub ExtractAssociatedIconExW # exported by name 186 stub ExtractAssociatedIconExW # exported by name
187 stub ExtractAssociatedIconW # exported by name 187 stub ExtractAssociatedIconW # exported by name
188 stdcall ExtractIconA(long str long) ExtractIcon32A # exported by name 188 stdcall ExtractIconA(long str long) ExtractIcon32A # exported by name
189 stub ExtractIconEx # exported by name 189 stdcall ExtractIconEx(ptr long ptr ptr long) ExtractIconEx32AW
190 stub ExtractIconExA # exported by name 190 stdcall ExtractIconExA(str long ptr ptr long) ExtractIconEx32A
191 stub ExtractIconExW # exported by name 191 stdcall ExtractIconExW(wstr long ptr ptr long) ExtractIconEx32W
192 stub ExtractIconResInfoA # exported by name 192 stub ExtractIconResInfoA # exported by name
193 stub ExtractIconResInfoW # exported by name 193 stub ExtractIconResInfoW # exported by name
194 stdcall ExtractIconW(long wstr long) ExtractIcon32W # exported by name 194 stdcall ExtractIconW(long wstr long) ExtractIcon32W # exported by name
@ -297,9 +297,9 @@ init Shell32LibMain
288 stdcall ShellAboutA(long str str long) ShellAbout32A 288 stdcall ShellAboutA(long str str long) ShellAbout32A
289 stdcall ShellAboutW(long wstr wstr long) ShellAbout32W 289 stdcall ShellAboutW(long wstr wstr long) ShellAbout32W
290 stdcall ShellExecuteA(long str str str str long) ShellExecute32A 290 stdcall ShellExecuteA(long str str str str long) ShellExecute32A
291 stdcall ShellExecuteEx (long) ShellExecuteEx32A 291 stdcall ShellExecuteEx (long) ShellExecuteEx32
292 stdcall ShellExecuteExA (long) ShellExecuteEx32A 292 stdcall ShellExecuteExA (long) ShellExecuteEx32A
293 stub ShellExecuteExW 293 stdcall ShellExecuteExW (long) ShellExecuteEx32W
294 stub ShellExecuteW 294 stub ShellExecuteW
295 stub ShellHookProc # exported by name 295 stub ShellHookProc # exported by name
296 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIcon 296 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIcon
@ -339,7 +339,7 @@ init Shell32LibMain
505 stdcall SHRegCloseKey (long) SHRegCloseKey32 505 stdcall SHRegCloseKey (long) SHRegCloseKey32
506 stdcall SHRegOpenKeyA (long str long) SHRegOpenKey32A 506 stdcall SHRegOpenKeyA (long str long) SHRegOpenKey32A
507 stdcall SHRegOpenKeyW (long wstr long long) SHRegOpenKey32W 507 stdcall SHRegOpenKeyW (long wstr long) SHRegOpenKey32W
508 stub SHRegQueryValueA@16 508 stub SHRegQueryValueA@16
509 stdcall SHRegQueryValueExA(long str ptr ptr ptr ptr) SHRegQueryValueEx32A 509 stdcall SHRegQueryValueExA(long str ptr ptr ptr ptr) SHRegQueryValueEx32A
510 stdcall SHRegQueryValueW (long long long long) SHRegQueryValue32W 510 stdcall SHRegQueryValueW (long long long long) SHRegQueryValue32W
@ -366,7 +366,7 @@ init Shell32LibMain
650 stub PathIsSameRoot@8 650 stub PathIsSameRoot@8
651 stdcall ReadCabinetState (long long) ReadCabinetState 651 stdcall ReadCabinetState (long long) ReadCabinetState
652 stdcall WriteCabinetState (long) WriteCabinetState 652 stdcall WriteCabinetState (long) WriteCabinetState
653 stub PathProcessCommand@16 653 stdcall PathProcessCommand (long long long long) PathProcessCommand
660 stdcall FileIconInit (long) FileIconInit 660 stdcall FileIconInit (long) FileIconInit