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

201 lines
7.8 KiB
C

//---------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation 1993-1994
//
// File: brfcasep.h
//
// Internal header shared between SHELL232 and SYNCUI
//
// History:
// 01-27-94 ScottH Copied from brfcase.h
//
//---------------------------------------------------------------------------
#ifndef _BRFCASEP_H_
#define _BRFCASEP_H_
//===========================================================================
//
// IBriefcaseStg Interface
//
// This is a private interface for use between the shell and the briefcase.
//
// This interface is used by the Shell's IShellFolder implementation
// when it is bound to a folder that is (in) a briefcase. The IShellView
// of the particular folder binds to this interface to open the briefcase
// database storage and optionally make modifications. File-objects that
// are added to a folder in a briefcase are not added to the storage
// database until IBriefcaseStg::AddObject is called. Keep in mind the
// difference between IBriefcaseStg and IShellFolder. IBriefcaseStg
// simply provides access to the briefcase storage database--the file-system
// objects are only affected upon subsequent reconciliation using
// IBriefcaseStg::UpdateObject, unless otherwise noted.
//
//
// [Member functions]
//
//
// IBriefcaseStg::Initialize(pszFolder, hwndOwner)
//
// Initializes the interface by specifying the folder for this storage
// instance. If the folder does not exist somewhere in a briefcase
// storage hierarchy, then a briefcase database is created for this
// folder.
//
// IBriefcaseStg::AddObject(pdtobj, pszFolderEx, uFlags, hwndOwner)
//
// Adds a file-object(s) to the briefcase storage. This function also
// performs an update of the specific files to immediately make them
// up-to-date.
//
// Typically pdtobj refers to a file-object(s) outside the
// briefcase. Calling this function implies adding the object(s) to
// the briefcase storage database in the folder that was specified by
// IBriefcaseStg::Initialize(). This rule holds unless pszFolderEx is
// non-NULL, in which case pdtobj is sync-associated to pszFolderEx
// instead.
//
// AddObject() returns NOERROR if the object(s) were added. S_FALSE
// is returned if the caller should handle the action (eg, moving
// files from folder-to-folder within the briefcase).
//
// IBriefcaseStg::ReleaseObject(pdtobj, hwndOwner)
//
// Releases a file-object(s) from the briefcase storage database. This
// does not delete the file from the file-system.
//
// IBriefcaseStg::UpdateObject(pdtobj, hwndOwner)
//
// Performs a file-synchronization update to pdtobj. If pdtobj refers to
// the root of a briefcase storage hierarchy, the entire storage is updated.
//
// IBriefcaseStg::UpdateOnEvent(uEvent, hwndOwner)
//
// Performs a complete update of the briefcase storage based on the
// indicated event. The event ordinals may be:
//
// UOE_CONFIGCHANGED Indicates a PnP DBT_CONFIGCHANGED message wants
// to be processed. This occurs when a machine
// hot-docks.
//
// UOE_QUERYCHANGECONFIG Indicates a PnP DBT_QUERYCHANGECONFIG message
// wants to be processed. This occurs when a
// machine is about to hot-undock.
//
// IBriefcaseStg::GetExtraInfo(pszName, uInfo, wParam, lParam)
//
// Gets some specified extra info from the briefcase storage. The
// info is determined by uInfo, which is one of GEI_* values.
//
// IBriefcaseStg::Notify(pszPath, lEvent, puFlags, hwndOwner)
//
// Sends a notify event to the briefcase storage, so it can mark
// cached items stale. If lEvent is NOE_RENAME, pszPath must be a double
// null-terminated string, where the first is the old pathname, and the
// second is the new pathname. *puFlags is filled with flags pertaining
// to what the member function did. NF_REDRAWWINDOW means the window
// needs to be redrawn. NF_ITEMMARKED means the cached item in the
// briefcase storage associated with pszPath was marked stale.
//
// IBriefcaseStg::GetRootOf(pszBuffer, cbBuffer)
//
// Queries the briefcase storage for the root of the briefcase storage
// hierarchy.
//
// IBriefcaseStg::FindFirst(pszBuffer, cbBuffer)
//
// Finds the root of the first briefcase storage on the system. The
// buffer is filled with the fully qualified pathname. This function
// returns S_OK if a briefcase was found. S_FALSE is returned to end
// enumeration.
//
// IBriefcaseStg::FindNext(pszBuffer, cbBuffer)
//
// Finds the root of the next briefcase storage on the system. The
// buffer is filled with the fully qualified pathname. This function
// returns S_OK if a briefcase was found. S_FALSE is returned to end
// enumeration.
//
//
//
//===========================================================================
#undef INTERFACE
#define INTERFACE IBriefcaseStg
DECLARE_INTERFACE_(IBriefcaseStg, IUnknown)
{
// *** IUnknown methods ***
STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID * ppvObj) PURE;
STDMETHOD_(ULONG,AddRef) (THIS) PURE;
STDMETHOD_(ULONG,Release) (THIS) PURE;
// *** IBriefcaseStg methods ***
STDMETHOD(Initialize) (THIS_ LPCTSTR pszFolder, HWND hwnd) PURE;
STDMETHOD(AddObject) (THIS_ LPDATAOBJECT lpdobj, LPCTSTR pszFolderEx, UINT uFlags, HWND hwnd) PURE;
STDMETHOD(ReleaseObject) (THIS_ LPDATAOBJECT lpdobj, HWND hwnd) PURE;
STDMETHOD(UpdateObject) (THIS_ LPDATAOBJECT lpdobj, HWND hwnd) PURE;
STDMETHOD(UpdateOnEvent) (THIS_ UINT uEvent, HWND hwnd) PURE;
STDMETHOD(GetExtraInfo) (THIS_ LPCTSTR pszName, UINT uInfo, WPARAM wParam, LPARAM lParam) PURE;
STDMETHOD(Notify) (THIS_ LPCTSTR pszPath, LONG lEvent, UINT * puFlags, HWND hwndOwner) PURE;
STDMETHOD(FindFirst) (THIS_ LPTSTR pszPath, int cchMax) PURE;
STDMETHOD(FindNext) (THIS_ LPTSTR pszPath, int cchMax) PURE;
};
// Events for UpdateOnEvent member function
#define UOE_CONFIGCHANGED 1
#define UOE_QUERYCHANGECONFIG 2
// Flags for AddObject
#define AOF_DEFAULT 0x0000
#define AOF_UPDATEONREPLACE 0x0001
#define AOF_FILTERPROMPT 0x0002
// Notify events
#define NOE_RENAME 1L
#define NOE_RENAMEFOLDER 2L
#define NOE_CREATE 3L
#define NOE_CREATEFOLDER 4L
#define NOE_DELETE 5L
#define NOE_DELETEFOLDER 6L
#define NOE_DIRTY 7L
#define NOE_DIRTYFOLDER 8L
#define NOE_DIRTYALL 9L
// Flags that are returned by Notify member function
#define NF_REDRAWWINDOW 0x0001
#define NF_ITEMMARKED 0x0002
// Flags for GetExtraInfo wParam lParam
#define GEI_ROOT 1 // cchBuf pszBuf
#define GEI_ORIGIN 2 // cchBuf pszBuf
#define GEI_STATUS 3 // cchBuf pszBuf
#define GEI_DELAYHANDLE 4 // -- phandle
#define GEI_DATABASENAME 5 // cchBuf pszBuf
typedef IBriefcaseStg * LPBRIEFCASESTG;
// Special briefcase object struct
//
typedef struct _BriefObj
{
UINT cbSize; // size of allocated struct
UINT ibFileList; // offset of file list in struct
UINT ibBriefPath; // offset of briefcase path in struct
UINT cItems; // count of file-system objects
UINT cbListSize; // size of file list
TCHAR data[1]; // data
} BriefObj, * PBRIEFOBJ;
// Helper macros for briefcase object struct
#define BOBriefcasePath(pbo) ((LPTSTR)((LPBYTE)(pbo) + (pbo)->ibBriefPath))
#define BOFileList(pbo) ((LPTSTR)((LPBYTE)(pbo) + (pbo)->ibFileList))
#define BOFileCount(pbo) ((pbo)->cItems)
#define BOFileListSize(pbo) ((pbo)->cbListSize)
// Clipboard format for above struct
//
#define CFSTR_BRIEFOBJECT TEXT("Briefcase File Object")
#endif // _BRFCASEP_H_