Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

401 lines
9.8 KiB

//+--------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1994 - 1999.
//
// File: about.cxx
//
// Contents: Implementation of ISnapinAbout interface
//
// Classes: CSnapinAbout
//
// History: 2-09-1999 DavidMun Created
//
//---------------------------------------------------------------------------
#include "headers.hxx"
#pragma hdrstop
#include <ntverp.h> // 602542-2002/04/16-JonN LVER_PRODUCTVERSION_STR
//============================================================================
//
// IUnknown implementation
//
//============================================================================
//+---------------------------------------------------------------------------
//
// Member: CSnapinAbout::QueryInterface
//
// Synopsis: Return the requested interface
//
// History: 02-10-1999 DavidMun Created
//
//----------------------------------------------------------------------------
STDMETHODIMP
CSnapinAbout::QueryInterface(
REFIID riid,
LPVOID *ppvObj)
{
HRESULT hr = S_OK;
// TRACE_METHOD(CSnapinAbout, QueryInterface);
do
{
if (NULL == ppvObj)
{
hr = E_INVALIDARG;
DBG_OUT_HRESULT(hr);
break;
}
if (IsEqualIID(riid, IID_IUnknown))
{
*ppvObj = (IUnknown*)(IPersistStream*)this;
}
else if (IsEqualIID(riid, IID_ISnapinAbout))
{
*ppvObj = (IUnknown*)(ISnapinAbout*)this;
}
else
{
hr = E_NOINTERFACE;
#if (DBG == 1)
LPOLESTR pwszIID;
StringFromIID(riid, &pwszIID);
Dbg(DEB_ERROR, "CSnapinAbout::QI no interface %ws\n", pwszIID);
CoTaskMemFree(pwszIID);
#endif // (DBG == 1)
}
if (FAILED(hr))
{
*ppvObj = NULL;
break;
}
//
// If we got this far we are handing out a new interface pointer on
// this object, so addref it.
//
AddRef();
} while (0);
return hr;
}
//+---------------------------------------------------------------------------
//
// Member: CSnapinAbout::AddRef
//
// Synopsis: Standard OLE
//
// History: 02-10-1999 DavidMun Created
//
//----------------------------------------------------------------------------
STDMETHODIMP_(ULONG)
CSnapinAbout::AddRef()
{
return InterlockedIncrement((LONG *) &_cRefs);
}
//+---------------------------------------------------------------------------
//
// Member: CSnapinAbout::Release
//
// Synopsis: Standard OLE
//
// History: 02-10-1999 DavidMun Created
//
//----------------------------------------------------------------------------
STDMETHODIMP_(ULONG)
CSnapinAbout::Release()
{
ULONG cRefsTemp;
cRefsTemp = InterlockedDecrement((LONG *)&_cRefs);
if (0 == cRefsTemp)
{
delete this;
}
return cRefsTemp;
}
//============================================================================
//
// ISnapinAbout implementation
//
//============================================================================
//+--------------------------------------------------------------------------
//
// Member: CSnapinAbout::GetSnapinDescription
//
// Synopsis: Return a copy of the description string.
//
// Arguments: [lpDescription] - filled with string
//
// Returns: S_OK or E_OUTOFMEMORY
//
// Modifies: *[lpDescription]
//
// History: 2-09-1999 DavidMun Created
//
// Notes: Caller must CoTaskMemFree returned string
//
//---------------------------------------------------------------------------
STDMETHODIMP
CSnapinAbout::GetSnapinDescription(
LPOLESTR *lpDescription)
{
TRACE_METHOD(CSnapinAbout, GetSnapinDescription);
ASSERT(!IsBadWritePtr(lpDescription, sizeof(*lpDescription)));
WCHAR wzDescription[MAX_PATH];
LoadStr(IDS_SNAPIN_ABOUT_DESCRIPTION, wzDescription, ARRAYLEN(wzDescription));
return CoTaskDupStr(lpDescription, wzDescription);
}
//+--------------------------------------------------------------------------
//
// Member: CSnapinAbout::GetProvider
//
// Synopsis: Return a copy of the provider string.
//
// Arguments: [lpName] - filled with string
//
// Returns: S_OK or E_OUTOFMEMORY
//
// Modifies: *[lpName]
//
// History: 2-09-1999 DavidMun Created
//
// Notes: Caller must CoTaskMemFree returned string
//
//---------------------------------------------------------------------------
STDMETHODIMP
CSnapinAbout::GetProvider(
LPOLESTR *lpName)
{
TRACE_METHOD(CSnapinAbout, GetProvider);
ASSERT(!IsBadWritePtr(lpName, sizeof(*lpName)));
WCHAR wzProvider[MAX_PATH];
LoadStr(IDS_SNAPIN_ABOUT_PROVIDER_NAME, wzProvider, ARRAYLEN(wzProvider));
return CoTaskDupStr(lpName, wzProvider);
}
//+--------------------------------------------------------------------------
//
// Member: CSnapinAbout::GetSnapinVersion
//
// Synopsis: Return a copy of the version string.
//
// Arguments: [lpVersion] - filled with string
//
// Returns: S_OK or E_OUTOFMEMORY
//
// Modifies: *[lpVersion]
//
// History: 2-09-1999 DavidMun Created
//
// Notes: Caller must CoTaskMemFree returned string
//
//---------------------------------------------------------------------------
STDMETHODIMP
CSnapinAbout::GetSnapinVersion(
LPOLESTR *lpVersion)
{
TRACE_METHOD(CSnapinAbout, GetSnapinVersion);
ASSERT(!IsBadWritePtr(lpVersion, sizeof(*lpVersion)));
// 602542-2002/04/16-JonN
// If you store VER_PRODUCTVERSION_STR in a string resource,
// MUI breaks every time the version number is updated.
// Just keep this in the program data.
return CoTaskDupStr(lpVersion, LVER_PRODUCTVERSION_STR);
}
//+--------------------------------------------------------------------------
//
// Member: CSnapinAbout::GetSnapinImage
//
// Synopsis: Fill *[phAppIcon] with the icon representing this snapin.
//
// History: 2-09-1999 DavidMun Created
//
// Notes: This icon is used in the About box invoked from the wizard.
//
//---------------------------------------------------------------------------
STDMETHODIMP
CSnapinAbout::GetSnapinImage(
HICON *phAppIcon)
{
TRACE_METHOD(CSnapinAbout, GetSnapinImage);
ASSERT(!IsBadWritePtr(phAppIcon, sizeof(*phAppIcon)));
*phAppIcon = LoadIcon(g_hinst, MAKEINTRESOURCE(IDI_SNAPIN));
return *phAppIcon ? S_OK : HRESULT_FROM_LASTERROR;
}
//+--------------------------------------------------------------------------
//
// Member: CSnapinAbout::GetStaticFolderImage
//
// Synopsis:
//
// Arguments: [phSmallImage] - filled with handle to small image
// [phSmallImageOpen] - filled with handle to small image
// [phLargeImage] - filled with handle to large image
// [pcMask] - filled with bitmap mask color
//
// Returns: HRESULT
//
// Modifies: all out parameters
//
// History: 2-09-1999 DavidMun Created
//
//---------------------------------------------------------------------------
STDMETHODIMP
CSnapinAbout::GetStaticFolderImage(
HBITMAP *phSmallImage,
HBITMAP *phSmallImageOpen,
HBITMAP *phLargeImage,
COLORREF *pcMask)
{
TRACE_METHOD(CSnapinAbout, GetStaticFolderImage);
HRESULT hr = S_OK;
do
{
*pcMask = BITMAP_MASK_COLOR;
*phSmallImage = NULL;
*phSmallImageOpen = NULL;
*phLargeImage = NULL;
*phSmallImage = LoadBitmap(g_hinst,
MAKEINTRESOURCE(IDB_STATIC_FOLDER_CLOSED));
if (!*phSmallImage)
{
hr = HRESULT_FROM_LASTERROR;
DBG_OUT_HRESULT(hr);
break;
}
*phSmallImageOpen = (HBITMAP)
LoadImage(g_hinst,
MAKEINTRESOURCE(IDB_STATIC_FOLDER_OPEN),
IMAGE_BITMAP,
0,
0,
0);
if (!*phSmallImageOpen)
{
hr = HRESULT_FROM_LASTERROR;
DBG_OUT_HRESULT(hr);
DeleteObject(*phSmallImage);
*phSmallImage = NULL;
break;
}
*phLargeImage = LoadBitmap(g_hinst, MAKEINTRESOURCE(IDB_32x32));
if (!*phLargeImage)
{
hr = HRESULT_FROM_LASTERROR;
DBG_OUT_HRESULT(hr);
DeleteObject(*phSmallImage);
*phSmallImage = NULL;
DeleteObject(*phSmallImageOpen);
*phSmallImageOpen = NULL;
break;
}
} while (0);
return hr;
}
//+--------------------------------------------------------------------------
//
// Member: CSnapinAbout::CSnapinAbout
//
// Synopsis: ctor
//
// History: 2-10-1999 DavidMun Created
//
//---------------------------------------------------------------------------
CSnapinAbout::CSnapinAbout():
_cRefs(1)
{
TRACE_CONSTRUCTOR(CSnapinAbout);
DEBUG_INCREMENT_INSTANCE_COUNTER(CSnapin);
}
//+--------------------------------------------------------------------------
//
// Member: CSnapinAbout::~CSnapinAbout
//
// Synopsis: dtor
//
// History: 2-10-1999 DavidMun Created
//
//---------------------------------------------------------------------------
CSnapinAbout::~CSnapinAbout()
{
TRACE_DESTRUCTOR(CSnapinAbout);
DEBUG_DECREMENT_INSTANCE_COUNTER(CSnapin);
}