#ifndef _MULPRSHT_H #define _MULPRSHT_H #include "idlcomm.h" // for HIDA #include "ids.h" // we recycle this string from the printer stringtable in shell32.rc #define IDS_UNKNOWNERROR IDS_PRTPROP_UNKNOWNERROR #define IDT_SIZE 1 // file attribute state typedef struct { DWORD fReadOnly; // each dword is one of BST_CHECKED, BST_UNCHECKED, or BST_INDETERMINATE DWORD fHidden; DWORD fArchive; DWORD fIndex; DWORD fCompress; DWORD fEncrypt; DWORD fRecordingEnabled; } ATTRIBUTESTATE; typedef struct _FILEPROPSHEETPAGE FILEPROPSHEETPAGE; // FOLDERCONTENTSINFO includes members which are referenced across UI Thread and Size Thread. typedef struct { LONG _cRef; BOOL fIsSizeThreadAlive; HWND hDlg; BOOL bContinue; // tell thread to stop or mark as done ULONGLONG cbSize; // total size of all files in folder ULONGLONG cbActualSize; // total size on disk, taking into account compression and cluster slop DWORD dwClusterSize; // the size of a cluster int cFiles; // # files in folder int cFolders; // # folders in folder TCHAR szPath[MAX_PATH]; WIN32_FIND_DATA fd; // for thread stack savings HIDA hida; BOOL fMultipleFiles; // are there multiple files? BOOL fIsCompressionAvailable; // is comrpession supported on the volume? ULARGE_INTEGER ulTotalNumberOfBytes; // total # of bytes to apply attributes to (for progress dlg) } FOLDERCONTENTSINFO; typedef struct _FILEPROPSHEETPAGE { PROPSHEETPAGE psp; BOOL fMountedDrive; // Are we dealing with a mounted drive or not? BOOL fIsLink; // Is this a .lnk file? //the following fields are used by both the structures HWND hDlg; TCHAR szPath[MAX_PATH]; // full path to the file (single file case) LPITEMIDLIST pidl; // pidl for the item == NULL if not initialized TCHAR szLinkTarget[MAX_PATH]; // full path of link target (if the file is a .lnk) ATTRIBUTESTATE asInitial; // initial file attribute state ATTRIBUTESTATE asCurrent; // current file attribute state BOOL fIsEncryptionAvailable; // is encryption supported on the volume? BOOL fIsIndexAvailable; // is conten indexing supported in the filesystem? //This is used only by the single file dialog proc LPVOID pAssocStore; // pointer to the Association Store, we use it to query type info IProgressDialog* pProgressDlg; // pointer to the IProgressDialog object ULARGE_INTEGER ulNumberOfBytesDone; // # of bytes that we have already applied attribs to (for progress dlg) FOLDERCONTENTSINFO* pfci; // the background size thread fills this structure with size info WIN32_FIND_DATA fd; // info about the file we are currently applying attribs to HWND hwndTip; // window handle for location tooltip HDPA hdpaBadFiles; // this dpa holds the names of the files that we dont want to apply attribs to TCHAR szInitialName[MAX_PATH]; // the original "short" name we display in the edit box BOOL fWMInitFinshed; // are we finished processing the WM_INITDIALOG message (needed for rename) BOOL fRecursive; // should we recurse into subdirs when applying attributes? BOOL fIsDirectory; // is this file a directory (in multiple files case: are any of the files a directory?) BOOL fIsExe; // if this is an .exe, we ask if they want to support user logon BOOL fRename; // has the user renamed the file/folder? BOOL fIgnoreAllErrors; // has the user hit "ignore all" to the error message? BOOL fShowExtension; // are we showing the real extension for this file in the name editbox? BOOL fFolderShortcut; int cItemsDone; // Number of items we have already applied attribs to (for progress dlg) BOOL fDisableRename; // Should the name edit box be disabled? //The following is used only by the mounted drv dialog proc int iDrive; // Drive id of the mounted drive if there is one TCHAR szFileSys[48]; // file system name. BOOL fCanRename; // is the name a valid name for renaming? // Folder shortcut specific stuff. LPITEMIDLIST pidlTarget; BOOL fValidateEdit; } FILEPROPSHEETPAGE; typedef struct { PROPSHEETPAGE psp; HWND hDlg; //szDrive will contain the mountpoint (e.g. c:\ or c:\folder\folder2\) TCHAR szDrive[MAX_PATH]; int iDrive; _int64 qwTot; _int64 qwFree; DWORD dwPieShadowHgt; ULARGE_INTEGER ulTotalNumberOfBytes; // total # of bytes to apply attributes to (for progress dlg) ATTRIBUTESTATE asInitial; // initial attribute state ATTRIBUTESTATE asCurrent; // current attribute state BOOL fIsCompressionAvailable; // is file-based compression available on this volume (NTFS?) BOOL fIsIndexAvailable; // is content indexing available on this volume? BOOL fRecursive; // should we recurse into subdirs when applying attributes? BOOL fMountedDrive; // is the proppage invoked from mounted point proppage } DRIVEPROPSHEETPAGE; typedef struct { LPCTSTR pszPath; DWORD dwLastError; } ATTRIBUTEERROR; STDAPI_(BOOL) ApplyFileAttributes(LPCTSTR pszPath, FILEPROPSHEETPAGE* pfpsp, HWND hWndParent, BOOL* pbSomethingChanged); STDAPI_(BOOL) ApplySingleFileAttributes(FILEPROPSHEETPAGE* pfpsp); STDAPI_(BOOL_PTR) CALLBACK RecursivePromptDlgProc(HWND hDlgRecurse, UINT uMessage, WPARAM wParam, LPARAM lParam); STDAPI_(void) SetDateTimeText(HWND hdlg, int id, const FILETIME *pftUTC); STDAPI_(void)SetDateTimeTextEx(HWND hdlg, int id, const FILETIME *pftUTC, DWORD dwFlags); STDAPI_(DWORD) GetVolumeFlags(LPCTSTR pszPath, OUT OPTIONAL LPTSTR pszFileSys, int cchFileSys); STDAPI_(void) SetInitialFileAttribs(FILEPROPSHEETPAGE* pfpsp, DWORD dwFlags, DWORD dwMask); BOOL_PTR CALLBACK AdvancedFileAttribsDlgProc(HWND hDlgAttribs, UINT uMessage, WPARAM wParam, LPARAM lParam); STDAPI_(void) SetDlgItemTextWithToolTip(HWND hDlg, UINT id, LPCTSTR pszText, HWND *phwndTT); STDAPI_(FOLDERCONTENTSINFO*) Create_FolderContentsInfo(); STDAPI_(LONG) AddRef_FolderContentsInfo(FOLDERCONTENTSINFO *pfci); STDAPI_(LONG) Release_FolderContentsInfo(FOLDERCONTENTSINFO *pfci); STDAPI InitCommonPrsht(FILEPROPSHEETPAGE *pfpsp); STDAPI FolderSize(LPCTSTR pszDir, FOLDERCONTENTSINFO * pfci); #endif // _MULPRSHT_H