676{
678 DWORD FileSystemFlags;
683 DWORD Needed, DirectoryLength;
686
687 if (!ppUnknown)
689
690
694 0,
697 &FileSystemFlags,
699 0))
700 {
703 }
706 else
707 {
709
710
712 {
715 }
717 {
720 }
722 {
725 }
727 if (!TokenUserInfo)
728 {
731 }
733 {
736 }
738 {
741 }
742 }
743
745 if (StringSid)
746 DirectoryLength +=
wcslen(StringSid) + 1;
749 Needed = (DirectoryLength + 1) *
sizeof(
WCHAR);
750
753 {
756 }
760 if (StringSid)
762 else
768 {
775 }
777 {
780 }
783 {
786 }
788 s->VolumePath =
p + 1;
790
791 *ppUnknown = (
IUnknown *)&
s->recycleBinImpl;
792
794
799 if (StringSid)
802 {
805 }
807}
#define ERROR_INSUFFICIENT_BUFFER
BOOL WINAPI GetTokenInformation(HANDLE TokenHandle, TOKEN_INFORMATION_CLASS TokenInformationClass, LPVOID TokenInformation, DWORD TokenInformationLength, PDWORD ReturnLength)
BOOL WINAPI OpenProcessToken(HANDLE ProcessHandle, DWORD DesiredAccess, PHANDLE TokenHandle)
BOOL WINAPI ConvertSidToStringSidW(PSID Sid, LPWSTR *StringSid)
#define CreateFileMappingW(a, b, c, d, e, f)
#define GetCurrentProcess()
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)
#define FILE_PERSISTENT_ACLS
HLOCAL NTAPI LocalFree(HLOCAL hMem)
LPVOID WINAPI CoTaskMemAlloc(SIZE_T size)
#define RECYCLE_BIN_DIRECTORY_WITH_ACL
#define RECYCLE_BIN_FILE_NAME
#define RECYCLE_BIN_DIRECTORY_WITHOUT_ACL
static VOID RecycleBin5_Destructor(struct RecycleBin5 *s)
CONST_VTBL struct IRecycleBin5Vtbl RecycleBin5Vtbl
static HRESULT RecycleBin5_Create(IN LPCWSTR Folder, IN PSID OwnerSid OPTIONAL)
#define ERROR_PATH_NOT_FOUND
#define HRESULT_FROM_WIN32(x)