Cleanup, small fixes, a few new stubs.
This commit is contained in:
parent
cf5faa6421
commit
72b76d1a41
|
@ -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 \
|
||||||
|
|
|
@ -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));
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)))
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
275
misc/shell.c
275
misc/shell.c
|
@ -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");
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue