62 if (!(FindData.cFileName[0] ==
'.' &&
63 (FindData.cFileName[1] ==
'\0' || (FindData.cFileName[1] ==
'.' && FindData.cFileName[2] ==
'\0'))))
65 wcscpy(pFilePart, FindData.cFileName);
132 IUnknown_AddRef(
This);
183 DWORD dwBufferLength = 0;
199 if (
s->EnumeratorCount != 0)
212 else if (
len < dwBufferLength)
216 dwBufferLength =
len;
230 if (dwBufferLength < 2 || szFullName[1] !=
':')
337 if (
MoveFileW(szFullName, DeletedFileName))
355 IRecycleBinEnumList *prbel;
356 IRecycleBinFile *prbf;
363 hr = IRecycleBin5_EnumObjects(
This, &prbel);
366 hr = IRecycleBinEnumList_Next(prbel, 1, &prbf,
NULL);
367 IRecycleBinEnumList_Release(prbel);
370 hr = IRecycleBinFile_Delete(prbf);
371 IRecycleBinFile_Release(prbf);
380 OUT IRecycleBinEnumList **ppEnumList)
383 IRecycleBinEnumList *prbel;
396 s->EnumeratorCount++;
399 IUnknown_Release(
pUnk);
417 if (
s->EnumeratorCount != 0)
433 for (
i = 0;
i < dwEntries;
i++)
446 pLast = pRecord + (dwEntries -
i - 1);
481 if (
s->EnumeratorCount != 0)
497 for (
i = 0;
i < dwEntries;
i++)
504 op.pFrom = pDeletedFileName;
505 op.pTo = pDeletedFile->FileNameW;
510 ERR(
"SHFileOperationW failed with 0x%x\n",
res);
517 pLast = pRecord + (dwEntries -
i - 1);
540 IN IRecycleBinEnumList *prbel)
544 s->EnumeratorCount--;
569 LPCSTR DesktopIniContents =
"[.ShellClassInfo]\r\nCLSID={645FF040-5081-101B-9F08-00AA002F954E}\r\n";
570 INFO2_HEADER Info2Contents[] = { { 5, 0, 0, 0x320, 0 } };
583 wcscpy(BufferName, Folder);
584 Separator =
wcsstr(&BufferName[3],
L"\\");
635 BytesToWrite =
strlen(DesktopIniContents);
657 BytesToWrite =
sizeof(Info2Contents);
678 DWORD FileSystemFlags;
683 DWORD Needed, DirectoryLength;
746 DirectoryLength +=
wcslen(StringSid) + 1;
749 Needed = (DirectoryLength + 1) *
sizeof(
WCHAR);
788 s->VolumePath =
p + 1;
791 *ppUnknown = (
IUnknown *)&
s->recycleBinImpl;
BOOL WINAPI SetFileAttributesW(LPCWSTR lpFileName, DWORD dwFileAttributes)
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PLONGLONG _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesWritten
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI FindNextFileW(IN HANDLE hFindFile, OUT LPWIN32_FIND_DATAW lpFindFileData)
BOOL WINAPI WriteFile(IN HANDLE hFile, IN LPCVOID lpBuffer, IN DWORD nNumberOfBytesToWrite OPTIONAL, OUT LPDWORD lpNumberOfBytesWritten, IN LPOVERLAPPED lpOverlapped OPTIONAL)
EXTERN_C const IID IID_IRecycleBin
CONST_VTBL struct IRecycleBin5Vtbl RecycleBin5Vtbl
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD _Out_opt_ LPSTR * lpFilePart
EXTERN_C const IID IID_IRecycleBin5
#define HRESULT_FROM_WIN32(x)
#define ROUND_UP(n, align)
VOID WINAPI CoTaskMemFree(LPVOID ptr)
#define WideCharToMultiByte
ACPI_SIZE strlen(const char *String)
static HRESULT RecycleBin5_Create(IN LPCWSTR Folder, IN PSID OwnerSid OPTIONAL)
#define FILE_ATTRIBUTE_SYSTEM
IRecycleBin5 recycleBinImpl
_CONST_RETURN wchar_t *__cdecl wcsstr(_In_z_ const wchar_t *_Str, _In_z_ const wchar_t *_SubStr)
EXTERN_C const IID IID_IRecycleBinEnumList
static ULONG STDMETHODCALLTYPE RecycleBin5_RecycleBin5_AddRef(IRecycleBin5 *This)
BOOL WINAPI SetEndOfFile(HANDLE hFile)
struct _DELETED_FILE_RECORD * PDELETED_FILE_RECORD
#define RECYCLE_BIN_FILE_NAME
HRESULT RecycleBin5_Constructor(IN LPCWSTR VolumePath, OUT IUnknown **ppUnknown)
#define ERROR_NOT_ENOUGH_MEMORY
#define INVALID_HANDLE_VALUE
DWORD WINAPI GetLastError(VOID)
DWORD WINAPI GetFullPathNameW(IN LPCWSTR lpFileName, IN DWORD nBufferLength, OUT LPWSTR lpBuffer, OUT LPWSTR *lpFilePart)
static HRESULT STDMETHODCALLTYPE RecycleBin5_RecycleBin5_DeleteFile(IN IRecycleBin5 *This, IN LPCWSTR szFileName)
#define INVALID_FILE_SIZE
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
int WINAPI SHFileOperationW(LPSHFILEOPSTRUCTW lpFileOp)
#define RECYCLE_BIN_DIRECTORY_WITH_ACL
struct _DELETED_FILE_RECORD DELETED_FILE_RECORD
DWORD WINAPI GetFileAttributesW(LPCWSTR lpFileName)
BOOL WINAPI MoveFileW(IN LPCWSTR lpExistingFileName, IN LPCWSTR lpNewFileName)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
FxContextHeader * pHeader
int _snwprintf(wchar_t *buffer, size_t count, const wchar_t *format,...)
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE _In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Out_ PIO_STATUS_BLOCK _In_opt_ PLARGE_INTEGER _In_ ULONG FileAttributes
#define ERROR_FILE_NOT_FOUND
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
#define ERROR_NO_MORE_FILES
#define RECYCLE_BIN_DIRECTORY_WITHOUT_ACL
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
struct _LARGE_INTEGER::@2284 u
#define FILE_ATTRIBUTE_DIRECTORY
BOOL WINAPI GetDiskFreeSpaceW(IN LPCWSTR lpRootPathName, OUT LPDWORD lpSectorsPerCluster, OUT LPDWORD lpBytesPerSector, OUT LPDWORD lpNumberOfFreeClusters, OUT LPDWORD lpTotalNumberOfClusters)
static HRESULT STDMETHODCALLTYPE RecycleBin5_RecycleBin5_Delete(IN IRecycleBin5 *This, IN LPCWSTR pDeletedFileName, IN DELETED_FILE_RECORD *pDeletedFile)
VOID WINAPI GetSystemTime(OUT LPSYSTEMTIME lpSystemTime)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static DWORD DWORD * dwLength
#define CreateFileMappingW(a, b, c, d, e, f)
static HRESULT STDMETHODCALLTYPE RecycleBin5_RecycleBin5_OnClosing(IN IRecycleBin5 *This, IN IRecycleBinEnumList *prbel)
#define FILE_ATTRIBUTE_READONLY
#define STDMETHODCALLTYPE
WCHAR FileNameW[MAX_PATH]
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
#define INVALID_FILE_ATTRIBUTES
static HRESULT STDMETHODCALLTYPE RecycleBin5_RecycleBin5_EnumObjects(IN IRecycleBin5 *This, OUT IRecycleBinEnumList **ppEnumList)
static HRESULT STDMETHODCALLTYPE RecycleBin5_RecycleBin5_QueryInterface(IRecycleBin5 *This, REFIID riid, void **ppvObject)
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define InterlockedDecrement
interface IRecycleBin5 IRecycleBin5
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
#define GetCurrentProcess()
REFIID LPVOID * ppvObject
#define ERROR_SHARING_VIOLATION
BOOL WINAPI GetVolumeInformationW(IN LPCWSTR lpRootPathName, IN LPWSTR lpVolumeNameBuffer, IN DWORD nVolumeNameSize, OUT LPDWORD lpVolumeSerialNumber OPTIONAL, OUT LPDWORD lpMaximumComponentLength OPTIONAL, OUT LPDWORD lpFileSystemFlags OPTIONAL, OUT LPWSTR lpFileSystemNameBuffer OPTIONAL, IN DWORD nFileSystemNameSize)
struct _FileName FileName
BOOL WINAPI SystemTimeToFileTime(IN CONST SYSTEMTIME *lpSystemTime, OUT LPFILETIME lpFileTime)
#define InterlockedIncrement
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
HLOCAL NTAPI LocalFree(HLOCAL hMem)
static HRESULT STDMETHODCALLTYPE RecycleBin5_RecycleBin5_Restore(IN IRecycleBin5 *This, IN LPCWSTR pDeletedFileName, IN DELETED_FILE_RECORD *pDeletedFile)
static ULONG STDMETHODCALLTYPE RecycleBin5_RecycleBin5_Release(IRecycleBin5 *This)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define FILE_ATTRIBUTE_HIDDEN
static VOID RecycleBin5_Destructor(struct RecycleBin5 *s)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
#define ERROR_NOT_SUPPORTED
static BOOL IntDeleteRecursive(IN LPCWSTR FullName)
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
char * cleanup(char *str)
#define ERROR_INVALID_NAME
#define FILE_PERSISTENT_ACLS
#define ERROR_PATH_NOT_FOUND
#define ERROR_ALREADY_EXISTS
static void *static void *static LPDIRECTPLAY IUnknown * pUnk
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
_Inout_opt_ PUNICODE_STRING Extension
size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
#define HeapFree(x, y, z)
HRESULT RecycleBin5Enum_Constructor(IN IRecycleBin5 *prb, IN HANDLE hInfo, IN HANDLE hInfoMapped, IN LPCWSTR szPrefix, OUT IUnknown **ppUnknown)
static HRESULT STDMETHODCALLTYPE RecycleBin5_RecycleBin5_EmptyRecycleBin(IN IRecycleBin5 *This)
#define IsEqualIID(riid1, riid2)
HANDLE WINAPI FindFirstFileW(IN LPCWSTR lpFileName, OUT LPWIN32_FIND_DATAW lpFindFileData)
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI FindClose(HANDLE hFindFile)
PULONG MinorVersion OPTIONAL