return refCount;
}
+static VOID
+RecycleBin5File_Destructor(
+ struct RecycleBin5File *s)
+{
+ TRACE("(%p)\n", s);
+
+ IRecycleBin5_Release(s->recycleBin);
+ CoTaskMemFree(s);
+}
+
static ULONG STDMETHODCALLTYPE
RecycleBin5File_RecycleBinFile_Release(
IN IRecycleBinFile *This)
refCount = InterlockedDecrement((PLONG)&s->ref);
if (refCount == 0)
- {
- IRecycleBin5_Release(s->recycleBin);
- CoTaskMemFree(s);
- }
+ RecycleBin5File_Destructor(s);
return refCount;
}
static HRESULT STDMETHODCALLTYPE
RecycleBin5File_RecycleBinFile_GetFileName(
IN IRecycleBinFile *This,
- IN DWORD BufferSize,
+ IN SIZE_T BufferSize,
IN OUT LPWSTR Buffer,
- OUT DWORD *RequiredSize)
+ OUT SIZE_T *RequiredSize)
{
struct RecycleBin5File *s = CONTAINING_RECORD(This, struct RecycleBin5File, recycleBinFileImpl);
DWORD dwRequired;
};
static HRESULT
-RecycleBin5_File_Constructor(
+RecycleBin5File_Constructor(
IN IRecycleBin5 *prb,
IN LPCWSTR Folder,
IN PDELETED_FILE_RECORD pDeletedFile,
IRecycleBin5_AddRef(s->recycleBin);
*ppFile = &s->recycleBinFileImpl;
wsprintfW(s->FullName, L"%s\\D%c%lu%s", Folder, pDeletedFile->dwDriveNumber + 'a', pDeletedFile->dwRecordUniqueId, Extension);
+ if (GetFileAttributesW(s->FullName) == INVALID_FILE_ATTRIBUTES)
+ {
+ RecycleBin5File_Destructor(s);
+ return E_FAIL;
+ }
return S_OK;
}
return refCount;
}
+static VOID
+RecycleBin5Enum_Destructor(
+ struct RecycleBin5Enum *s)
+{
+ TRACE("(%p)\n", s);
+
+ IRecycleBin5_OnClosing(s->recycleBin, &s->recycleBinEnumImpl);
+ UnmapViewOfFile(s->pInfo);
+ IRecycleBin5_Release(s->recycleBin);
+ CoTaskMemFree(s);
+}
+
static ULONG STDMETHODCALLTYPE
RecycleBin5Enum_RecycleBinEnumList_Release(
IN IRecycleBinEnumList *This)
refCount = InterlockedDecrement((PLONG)&s->ref);
if (refCount == 0)
- {
- IRecycleBin5_OnClosing(s->recycleBin, This);
- UnmapViewOfFile(s->pInfo);
- IRecycleBin5_Release(s->recycleBin);
- CoTaskMemFree(s);
- }
+ RecycleBin5Enum_Destructor(s);
return refCount;
}
pDeletedFile = (DELETED_FILE_RECORD *)(pHeader + 1) + i;
for (; i < dwEntries && fetched < celt; i++)
{
- hr = RecycleBin5_File_Constructor(s->recycleBin, s->szPrefix, pDeletedFile, &rgelt[fetched]);
- if (!SUCCEEDED(hr))
- {
- for (i = 0; i < fetched; i++)
- IRecycleBinFile_Release(rgelt[i]);
- return hr;
- }
+ hr = RecycleBin5File_Constructor(s->recycleBin, s->szPrefix, pDeletedFile, &rgelt[fetched]);
+ if (SUCCEEDED(hr))
+ fetched++;
pDeletedFile++;
- fetched++;
}
s->dwCurrent = i;
};
HRESULT
-RecycleBin5_Enumerator_Constructor(
+RecycleBin5Enum_Constructor(
IN IRecycleBin5 *prb,
IN HANDLE hInfo,
IN HANDLE hInfoMapped,