mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
Sync to Wine-20050211
James Hawkins <truiken@gmail.com> - Use Interlocked* instead of ++/-- in AddRef/Release. - Use only stored result of Interlocked* in AddRef/Release. - Expand TRACEs to display the ref count. Francois Gouget <fgouget@free.fr> - Assorted spelling fixes. Mike McCormack <mike@codeweavers.com> - Implement GetAdvise and SetAdvise. Henning Gerhardt <henning.gerhardt@web.de> - A small spelling fix and a small update (thank to Andreas Mohr). - Update German resources. Joris Huizer <jorishuizer@planet.nl> - add file_operation_delete - add file_operation_checkFlags - use these in SHFileOperationW replacing inline code svn path=/trunk/; revision=13544
This commit is contained in:
parent
52cb066916
commit
f890195506
21 changed files with 297 additions and 178 deletions
|
@ -170,9 +170,11 @@ static ULONG WINAPI IAutoComplete_fnAddRef(
|
||||||
IAutoComplete * iface)
|
IAutoComplete * iface)
|
||||||
{
|
{
|
||||||
IAutoCompleteImpl *This = (IAutoCompleteImpl *)iface;
|
IAutoCompleteImpl *This = (IAutoCompleteImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(%lu)\n",This,This->ref);
|
TRACE("(%p)->(%lu)\n", This, refCount - 1);
|
||||||
return ++(This->ref);
|
|
||||||
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -182,10 +184,11 @@ static ULONG WINAPI IAutoComplete_fnRelease(
|
||||||
IAutoComplete * iface)
|
IAutoComplete * iface)
|
||||||
{
|
{
|
||||||
IAutoCompleteImpl *This = (IAutoCompleteImpl *)iface;
|
IAutoCompleteImpl *This = (IAutoCompleteImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(%lu)\n",This,This->ref);
|
TRACE("(%p)->(%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref)) {
|
if (!refCount) {
|
||||||
TRACE(" destroying IAutoComplete(%p)\n",This);
|
TRACE(" destroying IAutoComplete(%p)\n",This);
|
||||||
HeapFree(GetProcessHeap(), 0, This->quickComplete);
|
HeapFree(GetProcessHeap(), 0, This->quickComplete);
|
||||||
HeapFree(GetProcessHeap(), 0, This->txtbackup);
|
HeapFree(GetProcessHeap(), 0, This->txtbackup);
|
||||||
|
@ -194,9 +197,8 @@ static ULONG WINAPI IAutoComplete_fnRelease(
|
||||||
if (This->enumstr)
|
if (This->enumstr)
|
||||||
IEnumString_Release(This->enumstr);
|
IEnumString_Release(This->enumstr);
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
|
|
@ -181,26 +181,27 @@ static HRESULT WINAPI ISF_ControlPanel_fnQueryInterface(IShellFolder2 * iface, R
|
||||||
static ULONG WINAPI ISF_ControlPanel_fnAddRef(IShellFolder2 * iface)
|
static ULONG WINAPI ISF_ControlPanel_fnAddRef(IShellFolder2 * iface)
|
||||||
{
|
{
|
||||||
ICPanelImpl *This = (ICPanelImpl *)iface;
|
ICPanelImpl *This = (ICPanelImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI ISF_ControlPanel_fnRelease(IShellFolder2 * iface)
|
static ULONG WINAPI ISF_ControlPanel_fnRelease(IShellFolder2 * iface)
|
||||||
{
|
{
|
||||||
ICPanelImpl *This = (ICPanelImpl *)iface;
|
ICPanelImpl *This = (ICPanelImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref)) {
|
if (!refCount) {
|
||||||
TRACE("-- destroying IShellFolder(%p)\n", This);
|
TRACE("-- destroying IShellFolder(%p)\n", This);
|
||||||
if (This->pidlRoot)
|
if (This->pidlRoot)
|
||||||
SHFree(This->pidlRoot);
|
SHFree(This->pidlRoot);
|
||||||
LocalFree((HLOCAL) This);
|
LocalFree((HLOCAL) This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -124,16 +124,21 @@ static HRESULT WINAPI IEnumFORMATETC_fnQueryInterface(LPENUMFORMATETC iface, REF
|
||||||
static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPENUMFORMATETC iface)
|
static ULONG WINAPI IEnumFORMATETC_fnAddRef(LPENUMFORMATETC iface)
|
||||||
{
|
{
|
||||||
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
|
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
|
||||||
TRACE("(%p)->(count=%lu)\n",This, This->ref);
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
return ++(This->ref);
|
|
||||||
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IEnumFORMATETC_fnRelease(LPENUMFORMATETC iface)
|
static ULONG WINAPI IEnumFORMATETC_fnRelease(LPENUMFORMATETC iface)
|
||||||
{
|
{
|
||||||
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
|
IEnumFORMATETCImpl *This = (IEnumFORMATETCImpl *)iface;
|
||||||
TRACE("(%p)->()\n",This);
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
if (!--(This->ref))
|
TRACE("(%p)->(%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying IEnumFORMATETC(%p)\n",This);
|
TRACE(" destroying IEnumFORMATETC(%p)\n",This);
|
||||||
if (This->pFmt)
|
if (This->pFmt)
|
||||||
|
@ -143,7 +148,7 @@ static ULONG WINAPI IEnumFORMATETC_fnRelease(LPENUMFORMATETC iface)
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed)
|
static HRESULT WINAPI IEnumFORMATETC_fnNext(LPENUMFORMATETC iface, ULONG celt, FORMATETC *rgelt, ULONG *pceltFethed)
|
||||||
|
@ -291,8 +296,11 @@ static HRESULT WINAPI IDataObject_fnQueryInterface(LPDATAOBJECT iface, REFIID ri
|
||||||
static ULONG WINAPI IDataObject_fnAddRef(LPDATAOBJECT iface)
|
static ULONG WINAPI IDataObject_fnAddRef(LPDATAOBJECT iface)
|
||||||
{
|
{
|
||||||
IDataObjectImpl *This = (IDataObjectImpl *)iface;
|
IDataObjectImpl *This = (IDataObjectImpl *)iface;
|
||||||
TRACE("(%p)->(count=%lu)\n",This, This->ref);
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
return ++(This->ref);
|
|
||||||
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -301,17 +309,18 @@ static ULONG WINAPI IDataObject_fnAddRef(LPDATAOBJECT iface)
|
||||||
static ULONG WINAPI IDataObject_fnRelease(LPDATAOBJECT iface)
|
static ULONG WINAPI IDataObject_fnRelease(LPDATAOBJECT iface)
|
||||||
{
|
{
|
||||||
IDataObjectImpl *This = (IDataObjectImpl *)iface;
|
IDataObjectImpl *This = (IDataObjectImpl *)iface;
|
||||||
TRACE("(%p)->()\n",This);
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
if (!--(This->ref))
|
TRACE("(%p)->(%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying IDataObject(%p)\n",This);
|
TRACE(" destroying IDataObject(%p)\n",This);
|
||||||
_ILFreeaPidl(This->apidl, This->cidl);
|
_ILFreeaPidl(This->apidl, This->cidl);
|
||||||
ILFree(This->pidl),
|
ILFree(This->pidl),
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -113,24 +113,26 @@ static HRESULT WINAPI IDropTargetHelper_fnQueryInterface (IDropTargetHelper * if
|
||||||
static ULONG WINAPI IDropTargetHelper_fnAddRef (IDropTargetHelper * iface)
|
static ULONG WINAPI IDropTargetHelper_fnAddRef (IDropTargetHelper * iface)
|
||||||
{
|
{
|
||||||
IDropTargetHelperImpl *This = (IDropTargetHelperImpl *)iface;
|
IDropTargetHelperImpl *This = (IDropTargetHelperImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IDropTargetHelper_fnRelease (IDropTargetHelper * iface)
|
static ULONG WINAPI IDropTargetHelper_fnRelease (IDropTargetHelper * iface)
|
||||||
{
|
{
|
||||||
IDropTargetHelperImpl *This = (IDropTargetHelperImpl *)iface;
|
IDropTargetHelperImpl *This = (IDropTargetHelperImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref)) {
|
if (!refCount) {
|
||||||
TRACE("-- destroying (%p)\n", This);
|
TRACE("-- destroying (%p)\n", This);
|
||||||
LocalFree ((HLOCAL) This);
|
LocalFree ((HLOCAL) This);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IDropTargetHelper_fnDragEnter (
|
static HRESULT WINAPI IDropTargetHelper_fnDragEnter (
|
||||||
|
|
|
@ -240,8 +240,11 @@ static ULONG WINAPI IEnumIDList_fnAddRef(
|
||||||
IEnumIDList * iface)
|
IEnumIDList * iface)
|
||||||
{
|
{
|
||||||
IEnumIDListImpl *This = (IEnumIDListImpl *)iface;
|
IEnumIDListImpl *This = (IEnumIDListImpl *)iface;
|
||||||
TRACE("(%p)->(%lu)\n",This,This->ref);
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
return ++(This->ref);
|
|
||||||
|
TRACE("(%p)->(%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
|
return refCount;
|
||||||
}
|
}
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* IEnumIDList_fnRelease
|
* IEnumIDList_fnRelease
|
||||||
|
@ -250,16 +253,16 @@ static ULONG WINAPI IEnumIDList_fnRelease(
|
||||||
IEnumIDList * iface)
|
IEnumIDList * iface)
|
||||||
{
|
{
|
||||||
IEnumIDListImpl *This = (IEnumIDListImpl *)iface;
|
IEnumIDListImpl *This = (IEnumIDListImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(%lu)\n",This,This->ref);
|
TRACE("(%p)->(%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref)) {
|
if (!refCount) {
|
||||||
TRACE(" destroying IEnumIDList(%p)\n",This);
|
TRACE(" destroying IEnumIDList(%p)\n",This);
|
||||||
DeleteList((IEnumIDList*)This);
|
DeleteList((IEnumIDList*)This);
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -130,10 +130,11 @@ static HRESULT WINAPI IExtractIconW_fnQueryInterface(IExtractIconW *iface, REFII
|
||||||
static ULONG WINAPI IExtractIconW_fnAddRef(IExtractIconW * iface)
|
static ULONG WINAPI IExtractIconW_fnAddRef(IExtractIconW * iface)
|
||||||
{
|
{
|
||||||
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
|
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n",This, This->ref );
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* IExtractIconW_Release
|
* IExtractIconW_Release
|
||||||
|
@ -141,17 +142,18 @@ static ULONG WINAPI IExtractIconW_fnAddRef(IExtractIconW * iface)
|
||||||
static ULONG WINAPI IExtractIconW_fnRelease(IExtractIconW * iface)
|
static ULONG WINAPI IExtractIconW_fnRelease(IExtractIconW * iface)
|
||||||
{
|
{
|
||||||
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
|
IExtractIconWImpl *This = (IExtractIconWImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->()\n",This);
|
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref))
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying IExtractIcon(%p)\n",This);
|
TRACE(" destroying IExtractIcon(%p)\n",This);
|
||||||
SHFree(This->pidl);
|
SHFree(This->pidl);
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT uFlags,
|
static HRESULT getIconLocationForFolder(IExtractIconW *iface, UINT uFlags,
|
||||||
|
|
|
@ -127,10 +127,11 @@ static HRESULT WINAPI IStream_fnQueryInterface(IStream *iface, REFIID riid, LPVO
|
||||||
static ULONG WINAPI IStream_fnAddRef(IStream *iface)
|
static ULONG WINAPI IStream_fnAddRef(IStream *iface)
|
||||||
{
|
{
|
||||||
ISHFileStream *This = (ISHFileStream *)iface;
|
ISHFileStream *This = (ISHFileStream *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n",This, This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -139,16 +140,17 @@ static ULONG WINAPI IStream_fnAddRef(IStream *iface)
|
||||||
static ULONG WINAPI IStream_fnRelease(IStream *iface)
|
static ULONG WINAPI IStream_fnRelease(IStream *iface)
|
||||||
{
|
{
|
||||||
ISHFileStream *This = (ISHFileStream *)iface;
|
ISHFileStream *This = (ISHFileStream *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->()\n",This);
|
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref))
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying SHFileStream (%p)\n",This);
|
TRACE(" destroying SHFileStream (%p)\n",This);
|
||||||
CloseHandle(This->handle);
|
CloseHandle(This->handle);
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG cb, ULONG* pcbRead)
|
static HRESULT WINAPI IStream_fnRead (IStream * iface, void* pv, ULONG cb, ULONG* pcbRead)
|
||||||
|
|
|
@ -977,7 +977,7 @@ LPITEMIDLIST WINAPI ILCreateFromPathAW (LPCVOID path)
|
||||||
* IShellFolder uses that FileSystem Bind Data object of the BindContext
|
* IShellFolder uses that FileSystem Bind Data object of the BindContext
|
||||||
* to pass data about the current path element to the next object. This
|
* to pass data about the current path element to the next object. This
|
||||||
* is used to avoid having to verify the current path element on disk, so
|
* is used to avoid having to verify the current path element on disk, so
|
||||||
* that creating an ItemIDList from a non-existent path still can work.
|
* that creating an ItemIDList from a nonexistent path still can work.
|
||||||
*/
|
*/
|
||||||
static HRESULT WINAPI _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile,
|
static HRESULT WINAPI _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile,
|
||||||
BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut)
|
BOOL bBindCtx, LPITEMIDLIST *ppidl, LPDWORD prgfInOut)
|
||||||
|
@ -1024,7 +1024,7 @@ static HRESULT WINAPI _ILParsePathW(LPCWSTR path, LPWIN32_FIND_DATAW lpFindFile,
|
||||||
* SHSimpleIDListFromPath [SHELL32.162]
|
* SHSimpleIDListFromPath [SHELL32.162]
|
||||||
*
|
*
|
||||||
* Creates a simple ItemIDList from a path and returns it. This function
|
* Creates a simple ItemIDList from a path and returns it. This function
|
||||||
* does not fail on non-existent paths.
|
* does not fail on nonexistent paths.
|
||||||
*
|
*
|
||||||
* PARAMS
|
* PARAMS
|
||||||
* path [I] path to parse and convert into an ItemIDList
|
* path [I] path to parse and convert into an ItemIDList
|
||||||
|
|
|
@ -188,3 +188,35 @@ STRINGTABLE DISCARDABLE
|
||||||
IDS_SHUTDOWN_TITLE "Anhalten"
|
IDS_SHUTDOWN_TITLE "Anhalten"
|
||||||
IDS_SHUTDOWN_PROMPT "Möchten Sie die aktuelle ReactOS Sitzung beenden ?"
|
IDS_SHUTDOWN_PROMPT "Möchten Sie die aktuelle ReactOS Sitzung beenden ?"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* shell folder path default values */
|
||||||
|
STRINGTABLE DISCARDABLE
|
||||||
|
{
|
||||||
|
IDS_PROGRAMS "Startmenü\\Programme"
|
||||||
|
IDS_PERSONAL "Eigene Dateien"
|
||||||
|
IDS_FAVORITES "Favoriten"
|
||||||
|
IDS_STARTUP "Startmenü\\Programme\\Autostart"
|
||||||
|
IDS_RECENT "Recent"
|
||||||
|
IDS_SENDTO "SendTo"
|
||||||
|
IDS_STARTMENU "Startmenü"
|
||||||
|
IDS_MYMUSIC "Eigene Dateien\\Meine Musik"
|
||||||
|
IDS_MYVIDEO "Eigene Dateien\\Meine Videos"
|
||||||
|
IDS_DESKTOPDIRECTORY "Desktop"
|
||||||
|
IDS_NETHOOD "Netzwerkumgebung"
|
||||||
|
IDS_TEMPLATES "Vorlagen"
|
||||||
|
IDS_APPDATA "Anwendungsdaten"
|
||||||
|
IDS_PRINTHOOD "Druckumgebung"
|
||||||
|
IDS_LOCAL_APPDATA "Lokale Einstellungen\\Anwendungsdaten"
|
||||||
|
IDS_INTERNET_CACHE "Temporary Internet Files"
|
||||||
|
IDS_COOKIES "Cookies"
|
||||||
|
IDS_HISTORY "Verlauf"
|
||||||
|
IDS_PROGRAM_FILES "Programme"
|
||||||
|
IDS_MYPICTURES "Eigene Dateien\\Eigene Bilder"
|
||||||
|
IDS_PROGRAM_FILES_COMMON "Programme\\Gemeinsame Dateien"
|
||||||
|
IDS_COMMON_DOCUMENTS "Dokumente"
|
||||||
|
IDS_ADMINTOOLS "Startmenü\\Programme\\Verwaltung"
|
||||||
|
IDS_COMMON_MUSIC "Dokumente\\Eigene Musik"
|
||||||
|
IDS_COMMON_PICTURES "Dokumente\\Eigene Bilder"
|
||||||
|
IDS_COMMON_VIDEO "Dokumente\\Eigene Videos"
|
||||||
|
IDS_CDBURN_AREA "Lokale Einstellungen\\Anwendungsdaten\\Microsoft\\CD Burning"
|
||||||
|
}
|
||||||
|
|
|
@ -974,10 +974,11 @@ static HRESULT WINAPI IShellLinkA_fnQueryInterface( IShellLinkA * iface, REFIID
|
||||||
static ULONG WINAPI IShellLinkA_fnAddRef(IShellLinkA * iface)
|
static ULONG WINAPI IShellLinkA_fnAddRef(IShellLinkA * iface)
|
||||||
{
|
{
|
||||||
IShellLinkImpl *This = (IShellLinkImpl *)iface;
|
IShellLinkImpl *This = (IShellLinkImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n",This,This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* IShellLinkA_Release
|
* IShellLinkA_Release
|
||||||
|
@ -985,11 +986,12 @@ static ULONG WINAPI IShellLinkA_fnAddRef(IShellLinkA * iface)
|
||||||
static ULONG WINAPI IShellLinkA_fnRelease(IShellLinkA * iface)
|
static ULONG WINAPI IShellLinkA_fnRelease(IShellLinkA * iface)
|
||||||
{
|
{
|
||||||
IShellLinkImpl *This = (IShellLinkImpl *)iface;
|
IShellLinkImpl *This = (IShellLinkImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n",This,This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (--(This->ref))
|
if (refCount)
|
||||||
return This->ref;
|
return refCount;
|
||||||
|
|
||||||
TRACE("-- destroying IShellLink(%p)\n",This);
|
TRACE("-- destroying IShellLink(%p)\n",This);
|
||||||
|
|
||||||
|
|
|
@ -556,9 +556,11 @@ static HRESULT WINAPI IDefClF_fnQueryInterface(
|
||||||
static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
|
static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
|
||||||
{
|
{
|
||||||
IDefClFImpl *This = (IDefClFImpl *)iface;
|
IDefClFImpl *This = (IDefClFImpl *)iface;
|
||||||
TRACE("(%p)->(count=%lu)\n",This,This->ref);
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
return InterlockedIncrement(&This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
|
return refCount;
|
||||||
}
|
}
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* IDefClF_fnRelease
|
* IDefClF_fnRelease
|
||||||
|
@ -566,9 +568,11 @@ static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
|
||||||
static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
|
static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
|
||||||
{
|
{
|
||||||
IDefClFImpl *This = (IDefClFImpl *)iface;
|
IDefClFImpl *This = (IDefClFImpl *)iface;
|
||||||
TRACE("(%p)->(count=%lu)\n",This,This->ref);
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!InterlockedDecrement(&This->ref))
|
if (!refCount)
|
||||||
{
|
{
|
||||||
if (This->pcRefDll) InterlockedDecrement(This->pcRefDll);
|
if (This->pcRefDll) InterlockedDecrement(This->pcRefDll);
|
||||||
|
|
||||||
|
@ -576,7 +580,7 @@ static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* IDefClF_fnCreateInstance
|
* IDefClF_fnCreateInstance
|
||||||
|
|
|
@ -673,7 +673,7 @@ void WINAPI SHAddToRecentDocs (UINT uFlags,LPCVOID pv)
|
||||||
if (ret == ERROR_SUCCESS) {
|
if (ret == ERROR_SUCCESS) {
|
||||||
if (!( (type == REG_DWORD) ||
|
if (!( (type == REG_DWORD) ||
|
||||||
((type == REG_BINARY) && (datalen == 4)) )) {
|
((type == REG_BINARY) && (datalen == 4)) )) {
|
||||||
ERR("Error policy data for \"NoRecentDocsHistory\" not formated correctly, type=%ld, len=%ld\n",
|
ERR("Error policy data for \"NoRecentDocsHistory\" not formatted correctly, type=%ld, len=%ld\n",
|
||||||
type, datalen);
|
type, datalen);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1995,7 +1995,7 @@ HRESULT WINAPI SHGetFolderLocation(
|
||||||
else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
|
else if (hr == HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND))
|
||||||
{
|
{
|
||||||
/* unlike SHGetFolderPath, SHGetFolderLocation in shell32
|
/* unlike SHGetFolderPath, SHGetFolderLocation in shell32
|
||||||
* version 6.0 returns E_FAIL for non-existing paths
|
* version 6.0 returns E_FAIL for nonexistent paths
|
||||||
*/
|
*/
|
||||||
hr = E_FAIL;
|
hr = E_FAIL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -157,19 +157,21 @@ static HRESULT WINAPI ISF_Desktop_fnQueryInterface (IShellFolder2 * iface, REFII
|
||||||
static ULONG WINAPI ISF_Desktop_fnAddRef (IShellFolder2 * iface)
|
static ULONG WINAPI ISF_Desktop_fnAddRef (IShellFolder2 * iface)
|
||||||
{
|
{
|
||||||
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI ISF_Desktop_fnRelease (IShellFolder2 * iface)
|
static ULONG WINAPI ISF_Desktop_fnRelease (IShellFolder2 * iface)
|
||||||
{
|
{
|
||||||
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref)) {
|
if (!refCount) {
|
||||||
TRACE ("-- destroying IShellFolder(%p)\n", This);
|
TRACE ("-- destroying IShellFolder(%p)\n", This);
|
||||||
if (This->pidlRoot)
|
if (This->pidlRoot)
|
||||||
SHFree (This->pidlRoot);
|
SHFree (This->pidlRoot);
|
||||||
|
@ -178,7 +180,7 @@ static ULONG WINAPI ISF_Desktop_fnRelease (IShellFolder2 * iface)
|
||||||
LocalFree ((HLOCAL) This);
|
LocalFree ((HLOCAL) This);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -173,19 +173,21 @@ static HRESULT WINAPI IUnknown_fnQueryInterface (IUnknown * iface, REFIID riid,
|
||||||
static ULONG WINAPI IUnknown_fnAddRef (IUnknown * iface)
|
static ULONG WINAPI IUnknown_fnAddRef (IUnknown * iface)
|
||||||
{
|
{
|
||||||
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IUnknown_fnRelease (IUnknown * iface)
|
static ULONG WINAPI IUnknown_fnRelease (IUnknown * iface)
|
||||||
{
|
{
|
||||||
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref)) {
|
if (!refCount) {
|
||||||
TRACE ("-- destroying IShellFolder(%p)\n", This);
|
TRACE ("-- destroying IShellFolder(%p)\n", This);
|
||||||
|
|
||||||
if (This->pidlRoot)
|
if (This->pidlRoot)
|
||||||
|
@ -193,9 +195,8 @@ static ULONG WINAPI IUnknown_fnRelease (IUnknown * iface)
|
||||||
if (This->sPathTarget)
|
if (This->sPathTarget)
|
||||||
SHFree (This->sPathTarget);
|
SHFree (This->sPathTarget);
|
||||||
LocalFree ((HLOCAL) This);
|
LocalFree ((HLOCAL) This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static IUnknownVtbl unkvt =
|
static IUnknownVtbl unkvt =
|
||||||
|
|
|
@ -160,26 +160,27 @@ static HRESULT WINAPI ISF_MyComputer_fnQueryInterface (IShellFolder2 * iface, RE
|
||||||
static ULONG WINAPI ISF_MyComputer_fnAddRef (IShellFolder2 * iface)
|
static ULONG WINAPI ISF_MyComputer_fnAddRef (IShellFolder2 * iface)
|
||||||
{
|
{
|
||||||
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI ISF_MyComputer_fnRelease (IShellFolder2 * iface)
|
static ULONG WINAPI ISF_MyComputer_fnRelease (IShellFolder2 * iface)
|
||||||
{
|
{
|
||||||
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
IGenericSFImpl *This = (IGenericSFImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE ("(%p)->(count=%lu)\n", This, This->ref);
|
TRACE ("(%p)->(count=%lu)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref)) {
|
if (!refCount) {
|
||||||
TRACE ("-- destroying IShellFolder(%p)\n", This);
|
TRACE ("-- destroying IShellFolder(%p)\n", This);
|
||||||
if (This->pidlRoot)
|
if (This->pidlRoot)
|
||||||
SHFree (This->pidlRoot);
|
SHFree (This->pidlRoot);
|
||||||
LocalFree ((HLOCAL) This);
|
LocalFree ((HLOCAL) This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -861,6 +861,90 @@ static const char * debug_shfileops_action( DWORD op )
|
||||||
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026
|
#define ERROR_SHELL_INTERNAL_FILE_NOT_FOUND 1026
|
||||||
#define HIGH_ADR (LPWSTR)0xffffffff
|
#define HIGH_ADR (LPWSTR)0xffffffff
|
||||||
|
|
||||||
|
static int file_operation_delete( WIN32_FIND_DATAW *wfd,SHFILEOPSTRUCTW nFileOp, LPWSTR pFromFile,LPWSTR pTempFrom,HANDLE *hFind)
|
||||||
|
|
||||||
|
{
|
||||||
|
LPWSTR lpFileName;
|
||||||
|
BOOL b_Mask = (NULL != StrPBrkW(&pFromFile[1], wWildcardChars));
|
||||||
|
int retCode = 0;
|
||||||
|
do
|
||||||
|
{
|
||||||
|
lpFileName = wfd->cAlternateFileName;
|
||||||
|
if (!lpFileName[0])
|
||||||
|
lpFileName = wfd->cFileName;
|
||||||
|
if (IsDotDir(lpFileName) ||
|
||||||
|
((b_Mask) && IsAttribDir(wfd->dwFileAttributes) && (nFileOp.fFlags & FOF_FILESONLY)))
|
||||||
|
continue;
|
||||||
|
SHFileStrCpyCatW(&pFromFile[1], lpFileName, NULL);
|
||||||
|
/* TODO: Check the SHELL_DeleteFileOrDirectoryW() function in shell32.dll */
|
||||||
|
if (IsAttribFile(wfd->dwFileAttributes))
|
||||||
|
{
|
||||||
|
if(SHNotifyDeleteFileW(pTempFrom) != ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
nFileOp.fAnyOperationsAborted = TRUE;
|
||||||
|
retCode = 0x78; /* value unknown */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(!SHELL_DeleteDirectoryW(pTempFrom, (!(nFileOp.fFlags & FOF_NOCONFIRMATION))))
|
||||||
|
{
|
||||||
|
nFileOp.fAnyOperationsAborted = TRUE;
|
||||||
|
retCode = 0x79; /* value unknown */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (!nFileOp.fAnyOperationsAborted && FindNextFileW(*hFind,wfd));
|
||||||
|
FindClose(*hFind);
|
||||||
|
*hFind = INVALID_HANDLE_VALUE;
|
||||||
|
return retCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Summary of flags:
|
||||||
|
*
|
||||||
|
* implemented flags:
|
||||||
|
* FOF_MULTIDESTFILES, FOF_NOCONFIRMATION, FOF_FILESONLY
|
||||||
|
*
|
||||||
|
* unimplememented and ignored flags:
|
||||||
|
* FOF_CONFIRMMOUSE, FOF_SILENT, FOF_NOCONFIRMMKDIR,
|
||||||
|
* FOF_SIMPLEPROGRESS, FOF_NOCOPYSECURITYATTRIBS
|
||||||
|
*
|
||||||
|
* partially implemented, breaks if file exists:
|
||||||
|
* FOF_RENAMEONCOLLISION
|
||||||
|
*
|
||||||
|
* unimplemented and break if any other flag set:
|
||||||
|
* FOF_ALLOWUNDO, FOF_WANTMAPPINGHANDLE
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int file_operation_checkFlags(SHFILEOPSTRUCTW nFileOp)
|
||||||
|
{
|
||||||
|
FILEOP_FLAGS OFl = ((FILEOP_FLAGS)nFileOp.fFlags & 0xfff);
|
||||||
|
long FuncSwitch = (nFileOp.wFunc & FO_MASK);
|
||||||
|
long level= nFileOp.wFunc >> 4;
|
||||||
|
|
||||||
|
TRACE("%s level=%ld nFileOp.fFlags=0x%x\n",
|
||||||
|
debug_shfileops_action(FuncSwitch), level, nFileOp.fFlags);
|
||||||
|
/* OFl &= (-1 - (FOF_MULTIDESTFILES | FOF_FILESONLY)); */
|
||||||
|
/* OFl ^= (FOF_SILENT | FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS | FOF_NOCONFIRMMKDIR); */
|
||||||
|
OFl &= (~(FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_FILESONLY)); /* implemented */
|
||||||
|
OFl ^= (FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCOPYSECURITYATTRIBS); /* ignored, if one */
|
||||||
|
OFl &= (~FOF_SIMPLEPROGRESS); /* ignored, only with FOF_SILENT */
|
||||||
|
if (OFl)
|
||||||
|
{
|
||||||
|
if (OFl & (~(FOF_CONFIRMMOUSE | FOF_SILENT | FOF_RENAMEONCOLLISION |
|
||||||
|
FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCOPYSECURITYATTRIBS)))
|
||||||
|
{
|
||||||
|
TRACE("%s level=%ld lpFileOp->fFlags=0x%x not implemented, Aborted=TRUE, stub\n",
|
||||||
|
debug_shfileops_action(FuncSwitch), level, OFl);
|
||||||
|
return 0x403; /* 1027, we need an extension to shlfileop */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TRACE("%s level=%ld lpFileOp->fFlags=0x%x not fully implemented, stub\n",
|
||||||
|
debug_shfileops_action(FuncSwitch), level, OFl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* SHFileOperationW [SHELL32.@]
|
* SHFileOperationW [SHELL32.@]
|
||||||
*
|
*
|
||||||
|
@ -884,8 +968,6 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||||
int retCode = 0;
|
int retCode = 0;
|
||||||
DWORD ToAttr;
|
DWORD ToAttr;
|
||||||
DWORD ToPathAttr;
|
DWORD ToPathAttr;
|
||||||
DWORD FromPathAttr;
|
|
||||||
FILEOP_FLAGS OFl = ((FILEOP_FLAGS)lpFileOp->fFlags & 0xfff);
|
|
||||||
|
|
||||||
BOOL b_Multi = (nFileOp.fFlags & FOF_MULTIDESTFILES);
|
BOOL b_Multi = (nFileOp.fFlags & FOF_MULTIDESTFILES);
|
||||||
|
|
||||||
|
@ -904,6 +986,8 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||||
long FuncSwitch = (nFileOp.wFunc & FO_MASK);
|
long FuncSwitch = (nFileOp.wFunc & FO_MASK);
|
||||||
long level= nFileOp.wFunc>>4;
|
long level= nFileOp.wFunc>>4;
|
||||||
|
|
||||||
|
int ret;
|
||||||
|
|
||||||
/* default no error */
|
/* default no error */
|
||||||
nFileOp.fAnyOperationsAborted = FALSE;
|
nFileOp.fAnyOperationsAborted = FALSE;
|
||||||
|
|
||||||
|
@ -932,47 +1016,12 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||||
* create dir 0 0 0 0 0 0 1 0
|
* create dir 0 0 0 0 0 0 1 0
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
ret = file_operation_checkFlags(nFileOp);
|
||||||
* Summary of flags:
|
if (ret != 0)
|
||||||
*
|
|
||||||
* implemented flags:
|
|
||||||
* FOF_MULTIDESTFILES, FOF_NOCONFIRMATION, FOF_FILESONLY
|
|
||||||
*
|
|
||||||
* unimplememented and ignored flags:
|
|
||||||
* FOF_CONFIRMMOUSE, FOF_SILENT, FOF_NOCONFIRMMKDIR,
|
|
||||||
* FOF_SIMPLEPROGRESS, FOF_NOCOPYSECURITYATTRIBS
|
|
||||||
*
|
|
||||||
* partially implemented, breaks if file exists:
|
|
||||||
* FOF_RENAMEONCOLLISION
|
|
||||||
*
|
|
||||||
* unimplemented and break if any other flag set:
|
|
||||||
* FOF_ALLOWUNDO, FOF_WANTMAPPINGHANDLE
|
|
||||||
*/
|
|
||||||
|
|
||||||
TRACE("%s level=%ld nFileOp.fFlags=0x%x\n",
|
|
||||||
debug_shfileops_action(FuncSwitch), level, lpFileOp->fFlags);
|
|
||||||
|
|
||||||
/* OFl &= (-1 - (FOF_MULTIDESTFILES | FOF_FILESONLY)); */
|
|
||||||
/* OFl ^= (FOF_SILENT | FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS | FOF_NOCONFIRMMKDIR); */
|
|
||||||
OFl &= (~(FOF_MULTIDESTFILES | FOF_NOCONFIRMATION | FOF_FILESONLY)); /* implemented */
|
|
||||||
OFl ^= (FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCOPYSECURITYATTRIBS); /* ignored, if one */
|
|
||||||
OFl &= (~FOF_SIMPLEPROGRESS); /* ignored, only with FOF_SILENT */
|
|
||||||
if (OFl)
|
|
||||||
{
|
{
|
||||||
if (OFl & (~(FOF_CONFIRMMOUSE | FOF_SILENT | FOF_RENAMEONCOLLISION |
|
retCode = ret;
|
||||||
FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_NOCOPYSECURITYATTRIBS)))
|
goto shfileop_end;
|
||||||
{
|
}
|
||||||
TRACE("%s level=%ld lpFileOp->fFlags=0x%x not implemented, Aborted=TRUE, stub\n",
|
|
||||||
debug_shfileops_action(FuncSwitch), level, OFl);
|
|
||||||
retCode = 0x403; /* 1027, we need an extension to shlfileop */
|
|
||||||
goto shfileop_end;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
TRACE("%s level=%ld lpFileOp->fFlags=0x%x not fully implemented, stub\n",
|
|
||||||
debug_shfileops_action(FuncSwitch), level, OFl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((pNextFrom) && (!(b_MultiTo) || (pNextTo)))
|
if ((pNextFrom) && (!(b_MultiTo) || (pNextTo)))
|
||||||
{
|
{
|
||||||
|
@ -1055,12 +1104,13 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||||
goto shfileop_end;
|
goto shfileop_end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hFind = FindFirstFileW(pFrom, &wfd);
|
hFind = FindFirstFileW(pFrom, &wfd);
|
||||||
if (INVALID_HANDLE_VALUE == hFind)
|
if (INVALID_HANDLE_VALUE == hFind)
|
||||||
{
|
{
|
||||||
if ((FO_DELETE == FuncSwitch) && (b_Mask))
|
if ((FO_DELETE == FuncSwitch) && (b_Mask))
|
||||||
{
|
{
|
||||||
|
DWORD FromPathAttr;
|
||||||
pFromFile[0] = '\0';
|
pFromFile[0] = '\0';
|
||||||
FromPathAttr = GetFileAttributesW(pTempFrom);
|
FromPathAttr = GetFileAttributesW(pTempFrom);
|
||||||
pFromFile[0] = '\\';
|
pFromFile[0] = '\\';
|
||||||
|
@ -1080,37 +1130,13 @@ int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
|
||||||
/* ??? b_Mask = (!SHFileStrICmpA(&pFromFile[1], &wfd.cFileName[0], HIGH_ADR, HIGH_ADR)); */
|
/* ??? b_Mask = (!SHFileStrICmpA(&pFromFile[1], &wfd.cFileName[0], HIGH_ADR, HIGH_ADR)); */
|
||||||
if (!pTo) /* FO_DELETE */
|
if (!pTo) /* FO_DELETE */
|
||||||
{
|
{
|
||||||
do
|
ret = file_operation_delete(&wfd,nFileOp,pFromFile,pTempFrom,&hFind);
|
||||||
|
/* if ret is not 0, nFileOp.fAnyOperationsAborted is TRUE */
|
||||||
|
if (ret != 0)
|
||||||
{
|
{
|
||||||
lpFileName = wfd.cAlternateFileName;
|
retCode = ret;
|
||||||
if (!lpFileName[0])
|
goto shfileop_end;
|
||||||
lpFileName = wfd.cFileName;
|
}
|
||||||
if (IsDotDir(lpFileName) ||
|
|
||||||
((b_Mask) && IsAttribDir(wfd.dwFileAttributes) && (nFileOp.fFlags & FOF_FILESONLY)))
|
|
||||||
continue;
|
|
||||||
SHFileStrCpyCatW(&pFromFile[1], lpFileName, NULL);
|
|
||||||
/* TODO: Check the SHELL_DeleteFileOrDirectoryW() function in shell32.dll */
|
|
||||||
if (IsAttribFile(wfd.dwFileAttributes))
|
|
||||||
{
|
|
||||||
if(SHNotifyDeleteFileW(pTempFrom) != ERROR_SUCCESS)
|
|
||||||
{
|
|
||||||
nFileOp.fAnyOperationsAborted = TRUE;
|
|
||||||
retCode = 0x78; /* value unknown */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if(!SHELL_DeleteDirectoryW(pTempFrom, (!(nFileOp.fFlags & FOF_NOCONFIRMATION))))
|
|
||||||
{
|
|
||||||
nFileOp.fAnyOperationsAborted = TRUE;
|
|
||||||
retCode = 0x79; /* value unknown */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while (!nFileOp.fAnyOperationsAborted && FindNextFileW(hFind, &wfd));
|
|
||||||
FindClose(hFind);
|
|
||||||
hFind = INVALID_HANDLE_VALUE;
|
|
||||||
if (nFileOp.fAnyOperationsAborted)
|
|
||||||
goto shfileop_end;
|
|
||||||
continue;
|
continue;
|
||||||
} /* FO_DELETE ends, pTo must be always valid from here */
|
} /* FO_DELETE ends, pTo must be always valid from here */
|
||||||
|
|
||||||
|
|
|
@ -179,22 +179,26 @@ static HRESULT WINAPI IFileSystemBindData_fnQueryInterface(IFileSystemBindData *
|
||||||
static ULONG WINAPI IFileSystemBindData_fnAddRef(IFileSystemBindData *iface)
|
static ULONG WINAPI IFileSystemBindData_fnAddRef(IFileSystemBindData *iface)
|
||||||
{
|
{
|
||||||
IFileSystemBindDataImpl *This = (IFileSystemBindDataImpl *)iface;
|
IFileSystemBindDataImpl *This = (IFileSystemBindDataImpl *)iface;
|
||||||
TRACE("(%p)\n", This);
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
return InterlockedIncrement(&This->ref);
|
|
||||||
|
TRACE("(%p)->(count=%li)\n", This, refCount - 1);
|
||||||
|
|
||||||
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static ULONG WINAPI IFileSystemBindData_fnRelease(IFileSystemBindData *iface)
|
static ULONG WINAPI IFileSystemBindData_fnRelease(IFileSystemBindData *iface)
|
||||||
{
|
{
|
||||||
IFileSystemBindDataImpl *This = (IFileSystemBindDataImpl *)iface;
|
IFileSystemBindDataImpl *This = (IFileSystemBindDataImpl *)iface;
|
||||||
TRACE("(%p)\n", This);
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
|
TRACE("(%p)->(count=%li)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!InterlockedDecrement(&This->ref))
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying ISFBindPidl(%p)\n",This);
|
TRACE(" destroying ISFBindPidl(%p)\n",This);
|
||||||
HeapFree(GetProcessHeap(), 0, This);
|
HeapFree(GetProcessHeap(), 0, This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI IFileSystemBindData_fnGetFindData(IFileSystemBindData *iface, WIN32_FIND_DATAW *pfd)
|
static HRESULT WINAPI IFileSystemBindData_fnGetFindData(IFileSystemBindData *iface, WIN32_FIND_DATAW *pfd)
|
||||||
|
|
|
@ -97,6 +97,9 @@ typedef struct
|
||||||
LISTVIEW_SORT_INFO ListViewSortInfo;
|
LISTVIEW_SORT_INFO ListViewSortInfo;
|
||||||
ULONG hNotify; /* change notification handle */
|
ULONG hNotify; /* change notification handle */
|
||||||
HANDLE hAccel;
|
HANDLE hAccel;
|
||||||
|
DWORD dwAspects;
|
||||||
|
DWORD dwAdvf;
|
||||||
|
IAdviseSink *pAdvSink;
|
||||||
} IShellViewImpl;
|
} IShellViewImpl;
|
||||||
|
|
||||||
static struct IShellViewVtbl svvt;
|
static struct IShellViewVtbl svvt;
|
||||||
|
@ -1639,10 +1642,11 @@ static HRESULT WINAPI IShellView_fnQueryInterface(IShellView * iface,REFIID riid
|
||||||
static ULONG WINAPI IShellView_fnAddRef(IShellView * iface)
|
static ULONG WINAPI IShellView_fnAddRef(IShellView * iface)
|
||||||
{
|
{
|
||||||
IShellViewImpl *This = (IShellViewImpl *)iface;
|
IShellViewImpl *This = (IShellViewImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n",This,This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
/**********************************************************
|
/**********************************************************
|
||||||
* IShellView_Release
|
* IShellView_Release
|
||||||
|
@ -1650,10 +1654,11 @@ static ULONG WINAPI IShellView_fnAddRef(IShellView * iface)
|
||||||
static ULONG WINAPI IShellView_fnRelease(IShellView * iface)
|
static ULONG WINAPI IShellView_fnRelease(IShellView * iface)
|
||||||
{
|
{
|
||||||
IShellViewImpl *This = (IShellViewImpl *)iface;
|
IShellViewImpl *This = (IShellViewImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->()\n",This);
|
TRACE("(%p)->(count=%li)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref))
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying IShellView(%p)\n",This);
|
TRACE(" destroying IShellView(%p)\n",This);
|
||||||
|
|
||||||
|
@ -1665,13 +1670,15 @@ static ULONG WINAPI IShellView_fnRelease(IShellView * iface)
|
||||||
if(This->pSF2Parent)
|
if(This->pSF2Parent)
|
||||||
IShellFolder2_Release(This->pSF2Parent);
|
IShellFolder2_Release(This->pSF2Parent);
|
||||||
|
|
||||||
if (This->apidl)
|
if(This->apidl)
|
||||||
SHFree(This->apidl);
|
SHFree(This->apidl);
|
||||||
|
|
||||||
|
if(This->pAdvSink)
|
||||||
|
IAdviseSink_Release(This->pAdvSink);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************
|
/**********************************************************
|
||||||
|
@ -2374,10 +2381,17 @@ static HRESULT WINAPI ISVViewObject_SetAdvise(
|
||||||
|
|
||||||
_ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
|
_ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
|
||||||
|
|
||||||
FIXME("Stub: This=%p\n",This);
|
FIXME("partial stub: %p %08lx %08lx %p\n",
|
||||||
|
This, aspects, advf, pAdvSink);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
/* FIXME: we set the AdviseSink, but never use it to send any advice */
|
||||||
|
This->pAdvSink = pAdvSink;
|
||||||
|
This->dwAspects = aspects;
|
||||||
|
This->dwAdvf = advf;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
static HRESULT WINAPI ISVViewObject_GetAdvise(
|
static HRESULT WINAPI ISVViewObject_GetAdvise(
|
||||||
IViewObject *iface,
|
IViewObject *iface,
|
||||||
DWORD* pAspects,
|
DWORD* pAspects,
|
||||||
|
@ -2387,9 +2401,20 @@ static HRESULT WINAPI ISVViewObject_GetAdvise(
|
||||||
|
|
||||||
_ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
|
_ICOM_THIS_From_IViewObject(IShellViewImpl, iface);
|
||||||
|
|
||||||
FIXME("Stub: This=%p\n",This);
|
TRACE("This=%p pAspects=%p pAdvf=%p ppAdvSink=%p\n",
|
||||||
|
This, pAspects, pAdvf, ppAdvSink);
|
||||||
|
|
||||||
return E_NOTIMPL;
|
if( ppAdvSink )
|
||||||
|
{
|
||||||
|
IAdviseSink_AddRef( This->pAdvSink );
|
||||||
|
*ppAdvSink = This->pAdvSink;
|
||||||
|
}
|
||||||
|
if( pAspects )
|
||||||
|
*pAspects = This->dwAspects;
|
||||||
|
if( pAdvf )
|
||||||
|
*pAdvf = This->dwAdvf;
|
||||||
|
|
||||||
|
return S_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -106,10 +106,11 @@ static HRESULT WINAPI ISVBgCm_fnQueryInterface(IContextMenu2 *iface, REFIID riid
|
||||||
static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu2 *iface)
|
static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu2 *iface)
|
||||||
{
|
{
|
||||||
BgCmImpl *This = (BgCmImpl *)iface;
|
BgCmImpl *This = (BgCmImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n",This, This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -118,10 +119,11 @@ static ULONG WINAPI ISVBgCm_fnAddRef(IContextMenu2 *iface)
|
||||||
static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu2 *iface)
|
static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu2 *iface)
|
||||||
{
|
{
|
||||||
BgCmImpl *This = (BgCmImpl *)iface;
|
BgCmImpl *This = (BgCmImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->()\n",This);
|
TRACE("(%p)->(count=%li)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref))
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying IContextMenu(%p)\n",This);
|
TRACE(" destroying IContextMenu(%p)\n",This);
|
||||||
|
|
||||||
|
@ -129,10 +131,8 @@ static ULONG WINAPI ISVBgCm_fnRelease(IContextMenu2 *iface)
|
||||||
IShellFolder_Release(This->pSFParent);
|
IShellFolder_Release(This->pSFParent);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
return refCount;
|
||||||
return This->ref;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
|
@ -142,10 +142,11 @@ static HRESULT WINAPI ISvItemCm_fnQueryInterface(IContextMenu2 *iface, REFIID ri
|
||||||
static ULONG WINAPI ISvItemCm_fnAddRef(IContextMenu2 *iface)
|
static ULONG WINAPI ISvItemCm_fnAddRef(IContextMenu2 *iface)
|
||||||
{
|
{
|
||||||
ItemCmImpl *This = (ItemCmImpl *)iface;
|
ItemCmImpl *This = (ItemCmImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedIncrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->(count=%lu)\n",This, This->ref);
|
TRACE("(%p)->(count=%lu)\n", This, refCount - 1);
|
||||||
|
|
||||||
return ++(This->ref);
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
@ -154,10 +155,11 @@ static ULONG WINAPI ISvItemCm_fnAddRef(IContextMenu2 *iface)
|
||||||
static ULONG WINAPI ISvItemCm_fnRelease(IContextMenu2 *iface)
|
static ULONG WINAPI ISvItemCm_fnRelease(IContextMenu2 *iface)
|
||||||
{
|
{
|
||||||
ItemCmImpl *This = (ItemCmImpl *)iface;
|
ItemCmImpl *This = (ItemCmImpl *)iface;
|
||||||
|
ULONG refCount = InterlockedDecrement(&This->ref);
|
||||||
|
|
||||||
TRACE("(%p)->()\n",This);
|
TRACE("(%p)->(count=%li)\n", This, refCount + 1);
|
||||||
|
|
||||||
if (!--(This->ref))
|
if (!refCount)
|
||||||
{
|
{
|
||||||
TRACE(" destroying IContextMenu(%p)\n",This);
|
TRACE(" destroying IContextMenu(%p)\n",This);
|
||||||
|
|
||||||
|
@ -171,9 +173,8 @@ static ULONG WINAPI ISvItemCm_fnRelease(IContextMenu2 *iface)
|
||||||
_ILFreeaPidl(This->apidl, This->cidl);
|
_ILFreeaPidl(This->apidl, This->cidl);
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(),0,This);
|
HeapFree(GetProcessHeap(),0,This);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return This->ref;
|
return refCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
|
|
Loading…
Reference in a new issue