369 lines
9.2 KiB
C
369 lines
9.2 KiB
C
|
/*++
|
|||
|
|
|||
|
<EFBFBD> 1998 Seagate Software, Inc. All rights reserved.
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
StdAfx.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Top level header file so we can take advantage of precompiled
|
|||
|
headers..
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Rohde Wakefield [rohde] 12-Aug-1997
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#ifndef _STDAFX_H
|
|||
|
#define _STDAFX_H
|
|||
|
|
|||
|
//
|
|||
|
// These NT header files must be included before any Win32 stuff or you
|
|||
|
// get lots of compiler errors
|
|||
|
//
|
|||
|
extern "C" {
|
|||
|
#include <nt.h>
|
|||
|
#include <ntrtl.h>
|
|||
|
#include <nturtl.h>
|
|||
|
// Undefine ASSSERT because the MFC also defines it and we don't
|
|||
|
// want the warning.
|
|||
|
#undef ASSERT
|
|||
|
}
|
|||
|
|
|||
|
#include <afxwin.h> // MFC core and standard components
|
|||
|
#include <afxext.h> // MFC extensions
|
|||
|
#include <afxdisp.h> // MFC OLE automation classes
|
|||
|
#include <afxcmn.h> // MFC support for Windows Common Controls
|
|||
|
#include <afxtempl.h>
|
|||
|
#include <mmc.h>
|
|||
|
|
|||
|
#define WSB_TRACE_IS WSB_TRACE_BIT_UI
|
|||
|
|
|||
|
#define CComPtr CComPtrAtl21
|
|||
|
|
|||
|
#include "wsb.h"
|
|||
|
#include "rslimits.h"
|
|||
|
|
|||
|
#undef CComPtr
|
|||
|
|
|||
|
//
|
|||
|
// Temp Hack until using newer ATL
|
|||
|
//
|
|||
|
#undef ATLASSERT
|
|||
|
#define ATLASSERT _ASSERTE
|
|||
|
template <class T>
|
|||
|
class _NoAddRefReleaseOnCComPtr : public T
|
|||
|
{
|
|||
|
private:
|
|||
|
virtual ULONG STDMETHODCALLTYPE AddRef()=0;
|
|||
|
virtual ULONG STDMETHODCALLTYPE Release()=0;
|
|||
|
};
|
|||
|
|
|||
|
template <class T>
|
|||
|
class CComPtr
|
|||
|
{
|
|||
|
public:
|
|||
|
typedef T _PtrClass;
|
|||
|
CComPtr()
|
|||
|
{
|
|||
|
p=NULL;
|
|||
|
}
|
|||
|
CComPtr(T* lp)
|
|||
|
{
|
|||
|
if ((p = lp) != NULL)
|
|||
|
p->AddRef();
|
|||
|
}
|
|||
|
CComPtr(const CComPtr<T>& lp)
|
|||
|
{
|
|||
|
if ((p = lp.p) != NULL)
|
|||
|
p->AddRef();
|
|||
|
}
|
|||
|
~CComPtr()
|
|||
|
{
|
|||
|
if (p)
|
|||
|
p->Release();
|
|||
|
}
|
|||
|
void Release()
|
|||
|
{
|
|||
|
IUnknown* pTemp = p;
|
|||
|
if (pTemp)
|
|||
|
{
|
|||
|
p = NULL;
|
|||
|
pTemp->Release();
|
|||
|
}
|
|||
|
}
|
|||
|
operator T*() const
|
|||
|
{
|
|||
|
return (T*)p;
|
|||
|
}
|
|||
|
T& operator*() const
|
|||
|
{
|
|||
|
ATLASSERT(p!=NULL);
|
|||
|
return *p;
|
|||
|
}
|
|||
|
//The assert on operator& usually indicates a bug. If this is really
|
|||
|
//what is needed, however, take the address of the p member explicitly.
|
|||
|
T** operator&()
|
|||
|
{
|
|||
|
ATLASSERT(p==NULL);
|
|||
|
return &p;
|
|||
|
}
|
|||
|
_NoAddRefReleaseOnCComPtr<T>* operator->() const
|
|||
|
{
|
|||
|
ATLASSERT(p!=NULL);
|
|||
|
return (_NoAddRefReleaseOnCComPtr<T>*)p;
|
|||
|
}
|
|||
|
T* operator=(T* lp)
|
|||
|
{
|
|||
|
return (T*)AtlComPtrAssign((IUnknown**)&p, lp);
|
|||
|
}
|
|||
|
T* operator=(const CComPtr<T>& lp)
|
|||
|
{
|
|||
|
return (T*)AtlComPtrAssign((IUnknown**)&p, lp.p);
|
|||
|
}
|
|||
|
bool operator!() const
|
|||
|
{
|
|||
|
return (p == NULL);
|
|||
|
}
|
|||
|
bool operator<(T* pT) const
|
|||
|
{
|
|||
|
return p < pT;
|
|||
|
}
|
|||
|
bool operator==(T* pT) const
|
|||
|
{
|
|||
|
return p == pT;
|
|||
|
}
|
|||
|
// Compare two objects for equivalence
|
|||
|
bool IsEqualObject(IUnknown* pOther)
|
|||
|
{
|
|||
|
if (p == NULL && pOther == NULL)
|
|||
|
return true; // They are both NULL objects
|
|||
|
|
|||
|
if (p == NULL || pOther == NULL)
|
|||
|
return false; // One is NULL the other is not
|
|||
|
|
|||
|
CComPtr<IUnknown> punk1;
|
|||
|
CComPtr<IUnknown> punk2;
|
|||
|
p->QueryInterface(IID_IUnknown, (void**)&punk1);
|
|||
|
pOther->QueryInterface(IID_IUnknown, (void**)&punk2);
|
|||
|
return punk1 == punk2;
|
|||
|
}
|
|||
|
void Attach(T* p2)
|
|||
|
{
|
|||
|
if (p)
|
|||
|
p->Release();
|
|||
|
p = p2;
|
|||
|
}
|
|||
|
T* Detach()
|
|||
|
{
|
|||
|
T* pt = p;
|
|||
|
p = NULL;
|
|||
|
return pt;
|
|||
|
}
|
|||
|
HRESULT CopyTo(T** ppT)
|
|||
|
{
|
|||
|
ATLASSERT(ppT != NULL);
|
|||
|
if (ppT == NULL)
|
|||
|
return E_POINTER;
|
|||
|
*ppT = p;
|
|||
|
if (p)
|
|||
|
p->AddRef();
|
|||
|
return S_OK;
|
|||
|
}
|
|||
|
HRESULT SetSite(IUnknown* punkParent)
|
|||
|
{
|
|||
|
return AtlSetChildSite(p, punkParent);
|
|||
|
}
|
|||
|
HRESULT Advise(IUnknown* pUnk, const IID& iid, LPDWORD pdw)
|
|||
|
{
|
|||
|
return AtlAdvise(p, pUnk, iid, pdw);
|
|||
|
}
|
|||
|
HRESULT CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL)
|
|||
|
{
|
|||
|
ATLASSERT(p == NULL);
|
|||
|
return ::CoCreateInstance(rclsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&p);
|
|||
|
}
|
|||
|
HRESULT CoCreateInstance(LPCOLESTR szProgID, LPUNKNOWN pUnkOuter = NULL, DWORD dwClsContext = CLSCTX_ALL)
|
|||
|
{
|
|||
|
CLSID clsid;
|
|||
|
HRESULT hr = CLSIDFromProgID(szProgID, &clsid);
|
|||
|
ATLASSERT(p == NULL);
|
|||
|
if (SUCCEEDED(hr))
|
|||
|
hr = ::CoCreateInstance(clsid, pUnkOuter, dwClsContext, __uuidof(T), (void**)&p);
|
|||
|
return hr;
|
|||
|
}
|
|||
|
template <class Q>
|
|||
|
HRESULT QueryInterface(Q** pp) const
|
|||
|
{
|
|||
|
ATLASSERT(pp != NULL && *pp == NULL);
|
|||
|
return p->QueryInterface(__uuidof(Q), (void**)pp);
|
|||
|
}
|
|||
|
T* p;
|
|||
|
};
|
|||
|
|
|||
|
//
|
|||
|
// End Temp Hack
|
|||
|
//
|
|||
|
|
|||
|
#include "Engine.h"
|
|||
|
#include "Fsa.h"
|
|||
|
#include "Rms.h"
|
|||
|
#include "Job.h"
|
|||
|
|
|||
|
#define RsQueryInterface( pUnk, interf, pNew ) (pUnk)->QueryInterface( IID_##interf, (void**) static_cast<interf **>( &pNew ) )
|
|||
|
#define RsQueryInterface2( pUnk, interf, pNew ) (pUnk)->QueryInterface( IID_##interf, (void**) static_cast<interf **>( pNew ) )
|
|||
|
|
|||
|
#include "hsmadmin.h"
|
|||
|
#include "resource.h"
|
|||
|
#include "BaseHsm.h"
|
|||
|
#include "RsUtil.h"
|
|||
|
#include "RsAdUtil.h"
|
|||
|
#include "PropPage.h"
|
|||
|
#include "CPropSht.h"
|
|||
|
#include "rshelpid.h"
|
|||
|
|
|||
|
class CHsmAdminApp : public CWinApp
|
|||
|
{
|
|||
|
public:
|
|||
|
virtual BOOL InitInstance();
|
|||
|
virtual int ExitInstance();
|
|||
|
void CHsmAdminApp::ParseCommandLine(CCommandLineInfo& rCmdInfo);
|
|||
|
};
|
|||
|
|
|||
|
extern CHsmAdminApp g_App;
|
|||
|
|
|||
|
#if 1
|
|||
|
|
|||
|
// Turn on In-Your-Trace error messages for debugging.
|
|||
|
|
|||
|
class CWsbThrowContext {
|
|||
|
public:
|
|||
|
CWsbThrowContext( char * File, long Line, HRESULT Hr ) :
|
|||
|
m_File(File), m_Line(Line), m_Hr(Hr) { }
|
|||
|
char * m_File;
|
|||
|
long m_Line;
|
|||
|
HRESULT m_Hr;
|
|||
|
};
|
|||
|
|
|||
|
#undef WsbThrow
|
|||
|
#define WsbThrow(hr) throw( CWsbThrowContext( __FILE__, __LINE__, hr ) );
|
|||
|
|
|||
|
#undef WsbCatchAndDo
|
|||
|
#define WsbCatchAndDo(hr, code) \
|
|||
|
catch(CWsbThrowContext context) { \
|
|||
|
hr = context.m_Hr; \
|
|||
|
CString msg; \
|
|||
|
msg.Format( L"Throw '%ls' on line [%ld] of %hs\n", WsbHrAsString( hr ), (long)context.m_Line, context.m_File ); \
|
|||
|
WsbTrace( (LPWSTR)(LPCWSTR)msg ); \
|
|||
|
{ code } \
|
|||
|
}
|
|||
|
|
|||
|
#undef WsbCatch
|
|||
|
#define WsbCatch(hr) \
|
|||
|
catch(CWsbThrowContext context) { \
|
|||
|
hr = context.m_Hr; \
|
|||
|
CString msg; \
|
|||
|
msg.Format( L"Throw '%ls' on line [%ld] of %hs\n", WsbHrAsString( hr ), (long)context.m_Line, context.m_File ); \
|
|||
|
WsbTrace( (LPWSTR)(LPCWSTR)msg ); \
|
|||
|
}
|
|||
|
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
// constant values used throughout
|
|||
|
#define UNINITIALIZED (-1)
|
|||
|
#define HSM_MAX_NAME MAX_COMPUTERNAME_LENGTH
|
|||
|
#define ONE_MEG (1048576)
|
|||
|
|
|||
|
// Clipboard formats
|
|||
|
extern const wchar_t* SAKSNAP_INTERNAL;
|
|||
|
extern const wchar_t* MMC_SNAPIN_MACHINE_NAME;
|
|||
|
extern const wchar_t* CF_EV_VIEWS;
|
|||
|
|
|||
|
#define ELT_SYSTEM (101)
|
|||
|
#define ELT_APPLICATION (103)
|
|||
|
#define VIEWINFO_FILTERED (0x0002)
|
|||
|
#define VIEWINFO_USER_CREATED (0x0008)
|
|||
|
#define LOGINFO_DONT_PERSIST (0x0800)
|
|||
|
#define EVENTLOG_ALL_EVENTS (EVENTLOG_ERROR_TYPE|EVENTLOG_WARNING_TYPE|EVENTLOG_INFORMATION_TYPE|EVENTLOG_AUDIT_SUCCESS|EVENTLOG_AUDIT_FAILURE)
|
|||
|
|
|||
|
|
|||
|
#define HSMADMIN_CURRENT_VERSION 1 // Current version for use in IPersist
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// Menu constants
|
|||
|
//
|
|||
|
//
|
|||
|
// Menubar's submenu order for adding into MMC context menu:
|
|||
|
//
|
|||
|
|
|||
|
#define MENU_INDEX_ROOT 0
|
|||
|
#define MENU_INDEX_NEW 1
|
|||
|
#define MENU_INDEX_TASK 2
|
|||
|
|
|||
|
#define MENU_HSMCOM_ROOT_PAUSE 0
|
|||
|
#define MENU_HSMCOM_ROOT_CONTINUE 1
|
|||
|
|
|||
|
#define MENU_HSMCOM_TASK_PAUSE 0
|
|||
|
#define MENU_HSMCOM_TASK_CONTINUE 1
|
|||
|
|
|||
|
#define EXTENSION_RS_FOLDER_PARAM -1
|
|||
|
#define HSMADMIN_NO_HSM_NAME L"No Hsm Name"
|
|||
|
|
|||
|
#ifndef IDC_HAND
|
|||
|
#define IDC_HAND MAKEINTRESOURCE(32649)
|
|||
|
#endif
|
|||
|
|
|||
|
#define RS_STR_KICKOFF_PARAMS _T("run manage")
|
|||
|
#define RS_STR_RESULT_PROPS_MANRESLST_IDS _T("DisplayName:Capacity:FreeSpace:DesiredFreeSpaceP")
|
|||
|
#define RS_STR_RESULT_PROPS_DEFAULT_IDS _T("DisplayName:Type:Description")
|
|||
|
#define RS_STR_RESULT_PROPS_COM_IDS _T("DisplayName:Description")
|
|||
|
#define RS_STR_RESULT_PROPS_MEDSET_IDS _T("DisplayName:Description:CapacityP:FreeSpaceP:StatusP:CopySet1P:CopySet2P:CopySet3P")
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// Common Flags
|
|||
|
//
|
|||
|
|
|||
|
#define RS_MB_ERROR (MB_OK|MB_ICONSTOP)
|
|||
|
#define RS_WINDIR_SIZE (2*MAX_PATH)
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// Common internal errors
|
|||
|
//
|
|||
|
|
|||
|
#define RS_E_NOT_CONFIGURED HRESULT_FROM_WIN32( ERROR_BAD_CONFIGURATION )
|
|||
|
#define RS_E_NOT_INSTALLED HRESULT_FROM_WIN32( ERROR_PRODUCT_UNINSTALLED )
|
|||
|
#define RS_E_DISABLED HRESULT_FROM_WIN32( ERROR_RESOURCE_DISABLED )
|
|||
|
#define RS_E_CANCELLED HRESULT_FROM_WIN32( ERROR_CANCELLED )
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
//
|
|||
|
// GUIDs for all UI nodes in the system (used as type identifiers)
|
|||
|
//
|
|||
|
/////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
// HsmCom UI node -
|
|||
|
// This is the static node known by the snapin manager. This is the only one that is
|
|||
|
// actually registered (see hsmadmin.rgs).
|
|||
|
extern const GUID cGuidHsmCom;
|
|||
|
|
|||
|
// The rest of the UI nodes -
|
|||
|
extern const GUID cGuidManVol;
|
|||
|
extern const GUID cGuidCar;
|
|||
|
extern const GUID cGuidMedSet;
|
|||
|
extern const GUID cGuidManVolLst;
|
|||
|
|
|||
|
|
|||
|
#endif // _STDAFX_H
|