diff options
author | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
---|---|---|
committer | Adam <you@example.com> | 2020-05-17 05:51:50 +0200 |
commit | e611b132f9b8abe35b362e5870b74bce94a1e58e (patch) | |
tree | a5781d2ec0e085eeca33cf350cf878f2efea6fe5 /public/sdk/inc/ilinkp.hxx | |
download | NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.gz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.bz2 NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.lz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.xz NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.tar.zst NT4.0-e611b132f9b8abe35b362e5870b74bce94a1e58e.zip |
Diffstat (limited to 'public/sdk/inc/ilinkp.hxx')
-rw-r--r-- | public/sdk/inc/ilinkp.hxx | 424 |
1 files changed, 424 insertions, 0 deletions
diff --git a/public/sdk/inc/ilinkp.hxx b/public/sdk/inc/ilinkp.hxx new file mode 100644 index 000000000..7229f9f13 --- /dev/null +++ b/public/sdk/inc/ilinkp.hxx @@ -0,0 +1,424 @@ +//+------------------------------------------------------------------------- +// +// Microsoft Windows +// Copyright (C) Microsoft Corporation, 1992 - 1992. +// +// File: ilinkp.hxx +// +// Contents: Declarations PRIVATE to link tracking code across +// multiple Cairo projects. +// Do not use these declarations without first contacting +// the current owner of this file. +// +// Classes: CTracker -- base for all tracking links +// COleTrackingLink -- base for shell and ole links +// COleLinkTrackingLink -- tracking for IOleLink def link +// COleShellTrackingLink -- tracking for shell ref +// +// Functions: +// +// History: 07-Aug-93 BillMo Created. +// +// Note: Id's of source are retrieved only when the source is bound to. +// +//-------------------------------------------------------------------------- + +#ifndef __ILINKP_HXX__ +#define __ILINKP_HXX__ + +#include <lnkobjid.hxx> + +#define ELEMENTS(x) (sizeof(x)/sizeof((x)[0])) +#define WCHARS(x) ELEMENTS(x) +#define ALIGN8(cb) (((cb-1) & (~7)) + 8) + +#define WCH_COMP_SEPARATOR L'\\' +#define WCH_ROOT_SEPARATOR L':' + +#define USER_REGISTRY_ROOT L"SoftWare\\Microsoft\\LinkSearch" +#define ABSOLUTE_MAX_AUTO 64 // volumes in auto searchlist +#define DEFAULT_MAX_AUTO 10 +#define MAX_BROADCASTS 10 +#define BROADCAST_REPLY_WAIT 300 + +#define DEFAULT_GROVEL_MONIKER_SIZE 1024 + +// new (ExceptOnFail) SFindObjectOut [FSCTL_OUT_BUFFER_SIZE]; +#define FSCTL_OUT_BUFFER_SIZE 10 + +// +// treepatcher won't allow paths > MAX_DOS_NETWORK_PATH +// +#define MAX_DOS_NETWORK_PATH 384 +#define MAX_NT_HEADER 20 +#define MAX_NT_NETWORK_PATH (MAX_DOS_NETWORK_PATH + MAX_NT_HEADER) + +#define MAX_EMBEDDINGLEVELS 40 + +#define TREECOPY_PAGESIZE 4096 +#define TREEPATCHER_SIG LONGSIG('h','c','p','y') + + + +class CVolume; +class CSearchContext; +class CEmbeddedMonikers; + +//-------------------------------------------------------------------------- +// +// Currently private definitions that may become public. +// +//-------------------------------------------------------------------------- + +typedef DWORD HCOPY; + +//-------------------------------------------------------------------------- +// +// Private error codes. +// +//-------------------------------------------------------------------------- + +#if !defined(LNK_NO_OLE2) + +// +// Error codes (HRESULT)0x80081580 to 0x800815bf are internal +// to link tracking. +// + +// +// Generated by CVolume::FindObject to indicate the volume was +// not even searched. +// +#define LINKP_E_VOLUME_NOT_SEARCHED ((HRESULT)0x80081580) + +// +// Generated by objectid.cxx::ReadObjectId(IPropertyStorage*,OBJECTID*) +// as an internal error to GetObjectId. +// +#define LINKP_E_NOSUCHPROPERTY ((HRESULT)0x80081581) + +// +// Generated by CVolume::FindObject to indicate that the volume was +// successfully contacted, but no object with matching id was found. +// +#define LINKP_E_VOLUME_SEARCHED_OBJECT_NOT_FOUND ((HRESULT)0x80081582) + +// +// Used in failure testing +// +#define LINKP_E_FAILTEST ((HRESULT)0x80081583) + +// +// Returned by ReplaceFileMoniker if there is no file moniker to replace. +// +#define LINKP_E_NOFILEMONIKER ((HRESULT)0x80081584) + +// +// IEnumMoniker::Next returned S_FALSE immediately after IMoniker::Enum +// was called successfully. +// +#define LINKP_E_NOMONIKERS ((HRESULT)0x80081585) + +// +// Couldn't rebuild moniker to pseudo-object because there +// weren't enough monikers in the enumeration. +// +#define LINKP_E_RANGE_INACCESSIBLE ((HRESULT) 0x80081586) + +// +// The path passed to CPathWalker was too long (i.e. absolute moniker +// path name too long.) +// +#define LINKP_E_INVALID_PATH ((HRESULT) 0x80081587) + +// +// The ancestor was not found by CPathWalker +// +#define LINKP_E_ANCESTOR_NOT_FOUND ((HRESULT) 0x80081588) + +// +// No object which is the only object with matching lineage and +// last component of name +// +#define LINKP_E_NOLINEAGEMATCH ((HRESULT) 0x80081589) + +// +// No object exactly matches the id +// +#define LINKP_E_NOEXACTMATCH ((HRESULT) 0x80081589) + +// +// No monikers in IMoniker::Enum +// +#define LINKP_E_ENUMEMPTY ((HRESULT) 0x8008158a) + +// +// Too many nesting levels +// +#define LINKP_E_TOOMANYEMBEDDINGLEVELS ((HRESULT) 0x8008158b) + +// +// Used when throwing exceptions due to not enough memory +// +#define LINK_E_NOT_ENOUGH_MEMORY \ + (HRESULT_FROM_WIN32(ERROR_NOT_ENOUGH_MEMORY)) + +#endif // !defined(LNK_NO_OLE2) + +//-------------------------------------------------------------------------- +// +// Defines for tracker object serialized form +// +//-------------------------------------------------------------------------- + +#define SHELLMK_SIG 0x0033 +#define OLEMK_SIG 0x0022 +#define MAX_LINK_EXPANSION 262144 + +#define LINK_FLAG_DOMAINID 0x00000001 +#define LINK_FLAG_VOLUMEID 0x00000002 +#define LINK_FLAG_OBJECTID 0x00000004 + +//-------------------------------------------------------------------------- +// +// Function predeclarations +// +//-------------------------------------------------------------------------- + +void UpdateAutoSearchList(void); + +//-------------------------------------------------------------------------- +// +// Functions used by DRT. +// +//-------------------------------------------------------------------------- + +const WCHAR *ObjectIdToString(const OBJECTID &oid); + +//+------------------------------------------------------------------------- +// +// Class: DFSID +// +// Purpose: Encapsulate specifics of DFS domain and volume ids. +// +//-------------------------------------------------------------------------- + +class DFSID +{ +public: + DFSID() + { + Invalidate(); + } + VOID Invalidate(VOID) + { + memset(&g, 0, sizeof(g)); + } + operator GUID () + { + return(g); + } + operator GUID * () + { + return(&g); + } + operator == (const DFSID &other) + { + return(0 == memcmp(&g, &other.g, sizeof(g))); + } + BOOL IsValid(VOID) + { + DFSID i; + + return(i != *this); + } +private: + GUID g; +}; + +typedef DFSID DOMAINID; +typedef DFSID VOLUMEID; + +//+------------------------------------------------------------------------- +// +// Class: CTracker +// +// Purpose: Base class for 1. extending Ole links, 2. supporting +// shell references, 3. supporting win32 links. +// +// This class contains code common to all types. +// +// Interface: +// +// History: 07-Aug-93 BillMo Created. +// +// Notes: +// +//-------------------------------------------------------------------------- + +#if !defined(LNK_NO_OLE2) + +// this should be put in its own header +class CTracker +{ +public: + + CTracker(); + + // assignment operators/ctors needed because of pointer. + + // doesn't copy expansion data + CTracker(const CTracker &); + + // doesn't overwrite expansion data + CTracker & CTracker::operator = (const CTracker & t); + + ~CTracker(); + + + // + // For OLE2 tracking + // + BOOL operator == (const CTracker &t); + BOOL operator != (const CTracker &t); + + HRESULT Load(IStorage *pstg); + HRESULT Save(IStorage *pstg); + HRESULT BindToObject(IBindCtx *pbc, + IMoniker *pmkToLeft, + REFIID riid, + void ** ppv, + IMoniker**ppmk); + HRESULT UpdateIdsFromMoniker(IBindCtx *pbc, IMoniker *pmk); + + // + // For OLE1 tracking + // + VOID SetObjectId(const OBJECTID &oid); + + // + // For OLE1 and OLE2 tracking + // + HRESULT FindObjectName(CVolume * pVolume, + BOOL fHintedVolumeValid, + WCHAR ** ppwszPath, + CEmbeddedMonikers *pem, + CSearchContext *psc, + const WCHAR *pwszOriginal); + +private: + + HRESULT SaveTrackingInfo(USHORT usSig, LPSTREAM pstm); + void Read(LPSTREAM pstm, void *pv, ULONG cbExpected); + HRESULT LoadTrackingInfo(USHORT usSig, LPSTREAM pstm); + HRESULT SearchEnumVolumes(CVolume *pVolume, + WCHAR **ppwszPath, + CEmbeddedMonikers *pem, + CSearchContext *psc, + const WCHAR *pwszOriginal); + HRESULT GetEmbeddedObjectsId(IBindCtx *pbc, IMoniker *pmk); + HRESULT wBindToObject(CSearchContext *psc, + IMoniker *pmkToLeft, + REFIID riid, + void ** ppv, + IMoniker**ppmk); + + HRESULT GetVolume(IBindCtx * pbc, IMoniker *pmkFile, CVolume *pVolume); + + + // + // if persistent data is added, then GetSizeMax must be + // changed. + // + ULONG _ulFlags; + + DOMAINID _didDomain; + VOLUMEID _vidVolume; + OBJECTID _oidFile; + OBJECTID _oidEmbed; + LONG _cNoStorage; + + // other cairo info + + // expansion data + ULONG _cbExpansion; + BYTE * _pbExpansion; + +}; +#endif // !defined(LNK_NO_OLE2) + +#if !defined(LNK_NO_NTDEF) +NTSTATUS PatchObjectId(UNICODE_STRING *pus, const OBJECTID &oid); +#endif + +// BUGBUG this class definition should be in its own header file +// when we get rid of lnkfsctl.exe's dependence on lnktrack.dll + +#if !defined(LNK_NO_EXCEPTIONS) +//+------------------------------------------------------------------------- +// +// Class: CFileHandle +// +// Purpose: Handle opening files for caller if necessary. +// +// Interface: CFileHandle::CFileHandle -- Initialize. +// CFileHandle::Open -- Open path. +// CFileHandle::OpenIf -- Open path if handle is not passed. +// CFileHandle::~CFileHandle -- Close file if we opened it. +// +// History: 07-Jun-92 BillMo Created. +// +// Notes: BUGBUG: should probably have a single unwindable object +// which contains all these resources. +// +//-------------------------------------------------------------------------- + +#include <except.hxx> + +class CFileHandle +{ +public: + CFileHandle(); + ~CFileHandle(); + + NTSTATUS OpenIf(HANDLE hFile, + const WCHAR * pwszPath, + DWORD dwAccess, + DWORD dwShare); + + NTSTATUS Open(const WCHAR * pwszDosPath, + ACCESS_MASK AccessMask = GENERIC_READ | SYNCHRONIZE, + ULONG ShareAccess = FILE_SHARE_READ); + + inline operator HANDLE (); + +private: + + HANDLE _hFile; + BOOL _fOpened; +}; + +//+------------------------------------------------------------------- +// +// Member: CFileHandle::operator HANDLE, public +// +// Synopsis: Return internal handle. For HANDLE parameter passing. +// +// History: 25-Jan-93 BillMo Created. +// +// Notes: +// +//-------------------------------------------------------------------- + +CFileHandle::operator HANDLE (void) +{ + return(_hFile); +} +#endif // !defined(LNK_NO_EXCEPTIONS) + +#if !defined(LNK_NO_NTDEF) +VOID PrependNtObjectName(UNICODE_STRING *pus); +#endif + +#endif + |