windows-nt/Source/XPSP1/NT/shell/shell32/propsht.h
2020-09-26 16:20:57 +08:00

143 lines
7.3 KiB
C

#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