284 lines
6.2 KiB
C++
284 lines
6.2 KiB
C++
//+-------------------------------------------------------------------
|
|
//
|
|
// File: scm.hxx
|
|
//
|
|
// Contents: Common stuff for OLE Service (SCM)
|
|
//
|
|
// History: 03-Jun-93 Ricksa Created
|
|
// 31-Dec-93 ErikGav Chicago port
|
|
// 03-Nov-94 BillMo ole32.dll contains scm
|
|
// (added notes below on defs.)
|
|
// 25-Oct-95 BruceMa Add support for Services
|
|
//
|
|
//---------------------------------------------------------------------
|
|
|
|
#ifdef _CHICAGO_
|
|
#include "chicago\scm.hxx"
|
|
#else
|
|
|
|
#ifndef __SCM_HXX__
|
|
#define __SCM_HXX__
|
|
|
|
#define SCM_ALLOW_SHARED_WOW 0
|
|
#define SCM_FORCE_SEPARATE_WOW 1
|
|
|
|
#define SHARED_SW L"/SHARED_WOW"
|
|
#define SEPARATE_SW L"/SEPARATE_WOW"
|
|
|
|
#include <scmmem.hxx>
|
|
|
|
#define GUIDSTR_MAX (1+ 8 + 1 + 4 + 1 + 4 + 1 + 4 + 1 + 12 + 1 + 1)
|
|
|
|
#ifndef _CHICAGO_
|
|
#define IFSECURITY(x) x,
|
|
#else
|
|
#define IFSECURITY(x)
|
|
#endif
|
|
|
|
//
|
|
// Here are some debug only routines
|
|
//
|
|
#if DBG == 1
|
|
extern char *apszModelStrings[4];
|
|
WCHAR *FormatGuid(const GUID& rguid, WCHAR *pwszGuid);
|
|
#endif
|
|
|
|
#ifndef _CHICAGO_
|
|
|
|
//---------------------------------------------------------------------
|
|
// OLE with SCM -- prototypes
|
|
//---------------------------------------------------------------------
|
|
|
|
DWORD Update(void *);
|
|
LONG LoadClassCache(void);
|
|
HRESULT InitSCMRegistry();
|
|
|
|
extern LPCWSTR pwszScmProtocolSequence[];
|
|
extern LPCWSTR pwszScmEndPoint[];
|
|
|
|
//
|
|
// NT lock and mutex classes
|
|
//
|
|
|
|
typedef class CLock CPortableLock;
|
|
typedef class CMutexSem CDynamicPortableMutex;
|
|
typedef class COleStaticMutexSem CStaticPortableMutex;
|
|
typedef class COleStaticLock CStaticPortableLock;
|
|
|
|
typedef DWORD (APIENTRY * GET_UNIVERSAL_NAME_FUNC)(
|
|
LPCWSTR lpLocalPath,
|
|
DWORD dwInfoLevel,
|
|
LPVOID lpBuffer,
|
|
LPDWORD lpBufferSize
|
|
);
|
|
|
|
DWORD APIENTRY ScmWNetGetUniversalName(
|
|
LPCWSTR lpLocalPath,
|
|
DWORD dwInfoLevel,
|
|
LPVOID lpBuffer,
|
|
LPDWORD lpBufferSize
|
|
);
|
|
|
|
typedef NET_API_STATUS (NET_API_FUNCTION * NET_SHARE_GET_INFO_FUNC)(
|
|
LPTSTR servername,
|
|
LPTSTR netname,
|
|
DWORD level,
|
|
LPBYTE *bufptr
|
|
);
|
|
|
|
NET_API_STATUS NET_API_FUNCTION ScmNetShareGetInfo(
|
|
LPTSTR servername,
|
|
LPTSTR netname,
|
|
DWORD level,
|
|
LPBYTE *bufptr
|
|
);
|
|
|
|
NTSTATUS
|
|
DfsFsctl(
|
|
HANDLE DfsHandle,
|
|
ULONG FsControlCode,
|
|
PVOID InputBuffer,
|
|
ULONG InputBufferLength,
|
|
PVOID OutputBuffer,
|
|
PULONG OutputBufferLength);
|
|
|
|
NTSTATUS
|
|
DfsOpen(
|
|
PHANDLE DfsHandle);
|
|
|
|
#else
|
|
|
|
//
|
|
// x86 Windows lock and mutex classes
|
|
//
|
|
|
|
typedef class CLockSmMutex CPortableLock;
|
|
class CDynamicPortableMutex : public CSmMutex
|
|
{
|
|
public:
|
|
inline VOID Request()
|
|
{
|
|
Get();
|
|
}
|
|
};
|
|
typedef CDynamicPortableMutex CStaticPortableMutex;
|
|
typedef CPortableLock CStaticPortableLock;
|
|
|
|
#endif
|
|
|
|
#define OLE32_DLL L"OLE32.DLL"
|
|
#define OLE32_BYTE_LEN sizeof(OLE32_DLL)
|
|
#define OLE32_CHAR_LEN (sizeof(OLE32_DLL) / sizeof(WCHAR) - 1)
|
|
|
|
#define SCM_EVENT_SOURCE L"DCOM"
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Function: NotFoundError
|
|
//
|
|
// Synopsis: Convert registry not found errors to TRUE
|
|
//
|
|
// Arguments: [err] - Input error
|
|
//
|
|
// Returns: TRUE - registry entry was not found
|
|
// FALSE - some other error
|
|
//
|
|
// History: 09-Nov-94 Ricksa Made inline and gave a header
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
inline BOOL NotFoundError(LONG err)
|
|
{
|
|
return(err == ERROR_FILE_NOT_FOUND || err == ERROR_BAD_PATHNAME);
|
|
}
|
|
|
|
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CAppIDData
|
|
//
|
|
// Purpose: Class to read registry entry for an appid.
|
|
//
|
|
// Interface: ReadEntries -- read the given classes info into
|
|
// the CAppIDData.
|
|
//
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
class CAppIDData
|
|
{
|
|
public:
|
|
CAppIDData();;
|
|
|
|
~CAppIDData();
|
|
|
|
|
|
LONG ReadEntries( LPOLESTR pwszAppID );
|
|
|
|
void Cleanup();
|
|
|
|
//private:
|
|
WCHAR *pwszRemoteServerName;
|
|
|
|
WCHAR *pwszLocalService;
|
|
WCHAR *pwszServiceArgs;
|
|
|
|
WCHAR *pwszRunAsUserName;
|
|
WCHAR *pwszRunAsDomainName;
|
|
|
|
SECURITY_DESCRIPTOR * pSD;
|
|
|
|
BOOL fHasRemoteServerName;
|
|
BOOL fHasService;
|
|
BOOL fActivateAtStorage;
|
|
|
|
LONG err;
|
|
LONG errClsReg;
|
|
LONG dwSaveErr;
|
|
|
|
};
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Class: CClassRegistryReader
|
|
//
|
|
// Purpose: Class to read registry. Reads one cls entrie.
|
|
//
|
|
// Interface: ReadSingleClass -- read the given classes info into
|
|
// the CRegistryReader, ready to
|
|
// by added to gcllClassCache by the
|
|
// client calling NewClassData.
|
|
//
|
|
// DoAdd -- Add the values previously read by ReadSingleClass
|
|
// to the gcllClassCache.
|
|
//
|
|
// Notes:
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
class CClassCacheList;
|
|
class CClassData;
|
|
|
|
class CClassRegistryReader
|
|
{
|
|
public:
|
|
CClassRegistryReader(); // open CLSID section of registry
|
|
~CClassRegistryReader();
|
|
|
|
LONG ReadSingleClass(
|
|
REFCLSID rclsid,
|
|
BOOL CheckTreatAs,
|
|
BOOL CheckAutoConvert );
|
|
|
|
CClassData * NewClassData(HRESULT &hr);
|
|
|
|
private:
|
|
|
|
void InitInner();
|
|
LONG ReadClassEntry(HKEY hKey, BOOL CheckTreatAs, BOOL CheckAutoConvert);
|
|
|
|
FILETIME ftLastWrite;
|
|
|
|
TCHAR awName[MAX_PATH];
|
|
|
|
DWORD cName;
|
|
DWORD iSubKey;
|
|
LONG err;
|
|
LONG errClsReg;
|
|
LONG dwSaveErr;
|
|
HKEY hClsReg;
|
|
#ifdef DCOM
|
|
// NT 5.0 BOOL _fShared;
|
|
#endif // DCOM
|
|
|
|
WCHAR awcsLocalServer[MAX_PATH];
|
|
WCHAR awcsAppID[40];
|
|
WCHAR *pwszLocalServer;
|
|
LONG lLocalServer;
|
|
ULONG lAppID;
|
|
WCHAR *pwszAppID;
|
|
#ifdef _CAIRO_
|
|
WCHAR awcsActivateAtBits[4];
|
|
#endif
|
|
WCHAR awcsDebug[4];
|
|
|
|
GUID guidClassID;
|
|
LONG lDebug;
|
|
BOOL fHasLocalServer;
|
|
BOOL f16Bit;
|
|
CAppIDData * pAppIDData;
|
|
};
|
|
|
|
#include <scm.h>
|
|
#ifdef DCOM
|
|
#define IFDCOM(x) x,
|
|
#else
|
|
#define IFDCOM(x)
|
|
#endif
|
|
|
|
#endif // __SCM_HXX__
|
|
|
|
#endif
|
|
|
|
|