133 lines
3 KiB
C++
133 lines
3 KiB
C++
//____________________________________________________________________________
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1995 - 1996.
|
|
//
|
|
// File: SnpInReg.cpp
|
|
//
|
|
// Contents:
|
|
//
|
|
// Classes:
|
|
//
|
|
// Functions:
|
|
//
|
|
// History: 11/10/1998 JonN Created
|
|
//
|
|
//____________________________________________________________________________
|
|
|
|
|
|
#include "stdafx.h"
|
|
#pragma hdrstop
|
|
#include "..\corecopy\regkey.h"
|
|
#include "snapreg.h"
|
|
#include "stdutils.h" // g_aNodetypeGUIDs
|
|
|
|
|
|
HRESULT RegisterNodetypes(
|
|
AMC::CRegKey& regkeyParent,
|
|
int* aiNodetypeIndexes,
|
|
int cNodetypeIndexes )
|
|
{
|
|
try
|
|
{
|
|
AMC::CRegKey regkeyNodeTypes;
|
|
regkeyNodeTypes.CreateKeyEx( regkeyParent, _T("NodeTypes") );
|
|
AMC::CRegKey regkeyNodeType;
|
|
for (int i = 0; i < cNodetypeIndexes; i++)
|
|
{
|
|
regkeyNodeType.CreateKeyEx(
|
|
regkeyNodeTypes,
|
|
g_aNodetypeGuids[aiNodetypeIndexes[i]].bstr );
|
|
regkeyNodeType.CloseKey();
|
|
}
|
|
}
|
|
catch (COleException* e)
|
|
{
|
|
ASSERT(FALSE);
|
|
e->Delete();
|
|
return SELFREG_E_CLASS;
|
|
}
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
HRESULT RegisterSnapin(
|
|
AMC::CRegKey& regkeySnapins,
|
|
LPCTSTR pszSnapinGUID,
|
|
BSTR bstrPrimaryNodetype,
|
|
UINT residSnapinName,
|
|
UINT residProvider,
|
|
UINT residVersion,
|
|
bool fStandalone,
|
|
LPCTSTR pszAboutGUID,
|
|
int* aiNodetypeIndexes,
|
|
int cNodetypeIndexes )
|
|
{
|
|
HRESULT hr = S_OK;
|
|
try
|
|
{
|
|
AMC::CRegKey regkeySnapin;
|
|
CString strSnapinName, strProvider, strVersion;
|
|
if ( !strSnapinName.LoadString(residSnapinName)
|
|
|| !strProvider.LoadString(residProvider)
|
|
|| !strVersion.LoadString(residVersion)
|
|
)
|
|
{
|
|
ASSERT(FALSE);
|
|
return SELFREG_E_CLASS;
|
|
}
|
|
regkeySnapin.CreateKeyEx( regkeySnapins, pszSnapinGUID );
|
|
if (NULL != bstrPrimaryNodetype)
|
|
{
|
|
regkeySnapin.SetString( _T("NodeType"), bstrPrimaryNodetype );
|
|
}
|
|
regkeySnapin.SetString( _T("NameString"), strSnapinName );
|
|
regkeySnapin.SetString( _T("Provider"), strProvider );
|
|
regkeySnapin.SetString( _T("Version"), strVersion );
|
|
if (fStandalone)
|
|
{
|
|
AMC::CRegKey regkeyStandalone;
|
|
regkeyStandalone.CreateKeyEx( regkeySnapin, _T("StandAlone") );
|
|
}
|
|
if (NULL != pszAboutGUID)
|
|
{
|
|
regkeySnapin.SetString( _T("About"), pszAboutGUID );
|
|
}
|
|
if ( NULL != aiNodetypeIndexes && 0 != cNodetypeIndexes )
|
|
{
|
|
hr = RegisterNodetypes(
|
|
regkeySnapin,
|
|
aiNodetypeIndexes,
|
|
cNodetypeIndexes );
|
|
}
|
|
|
|
//
|
|
// JonN 4/25/00
|
|
// 100624: MUI: MMC: Shared Folders snap-in stores
|
|
// its display information in the registry
|
|
//
|
|
// MMC now supports NameStringIndirect
|
|
//
|
|
TCHAR achModuleFileName[MAX_PATH+20];
|
|
if (0 < ::GetModuleFileName(
|
|
AfxGetInstanceHandle(),
|
|
achModuleFileName,
|
|
sizeof(achModuleFileName)/sizeof(TCHAR) ))
|
|
{
|
|
CString strNameIndirect;
|
|
strNameIndirect.Format( _T("@%s,-%d"),
|
|
achModuleFileName,
|
|
residSnapinName );
|
|
regkeySnapin.SetString( _T("NameStringIndirect"),
|
|
strNameIndirect );
|
|
}
|
|
}
|
|
catch (COleException* e)
|
|
{
|
|
ASSERT(FALSE);
|
|
e->Delete();
|
|
return SELFREG_E_CLASS;
|
|
}
|
|
return hr;
|
|
}
|