155 lines
3.9 KiB
C++
155 lines
3.9 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1999 - 1999.
|
|
//
|
|
// File: remcat.cxx
|
|
//
|
|
// Contents: Removable catalog registry support
|
|
//
|
|
// Classes: CRemovableCatalog
|
|
//
|
|
// History: 6-Apr-99 dlee Created.
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#include <pch.cxx>
|
|
#pragma hdrstop
|
|
|
|
#include <isreg.hxx>
|
|
#include <ciregkey.hxx>
|
|
#include <removcat.hxx>
|
|
|
|
extern WCHAR GetDriveLetterOfAnyScope( WCHAR const * pwcCatalog );
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Method: CRemovableCatalog::Create, public
|
|
//
|
|
// Synopsis: Creates temporary registry entries for the catalog
|
|
//
|
|
// History: 6-Apr-99 dlee Created.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
void CRemovableCatalog::Create()
|
|
{
|
|
// First, remove any existing values for the catalog
|
|
|
|
Destroy();
|
|
|
|
// Make the catalog key
|
|
|
|
WCHAR awcCat[40];
|
|
MakeCatalogName( awcCat );
|
|
|
|
BOOL fExisted;
|
|
{
|
|
CWin32RegAccess reg( HKEY_LOCAL_MACHINE, wcsRegCatalogsSubKey );
|
|
reg.CreateKey( awcCat, fExisted );
|
|
}
|
|
|
|
// Add values for this catalog under the key
|
|
|
|
WCHAR awcCatalog[200];
|
|
wsprintf( awcCatalog, L"%ws\\%ws", wcsRegCatalogsSubKey, awcCat );
|
|
|
|
WCHAR awcScopes[ 200 ];
|
|
wsprintf( awcScopes, L"%ws\\%ws", awcCatalog, wcsCatalogScopes );
|
|
|
|
{
|
|
CWin32RegAccess reg( HKEY_LOCAL_MACHINE, awcCatalog );
|
|
|
|
// Set the catalog location
|
|
|
|
WCHAR awcLocation[4];
|
|
wcscpy( awcLocation, L"x:\\" );
|
|
awcLocation[0] = _wcDrive;
|
|
reg.Set( wcsCatalogLocation, awcLocation );
|
|
|
|
//
|
|
// Make the catalog read-only, mark it as removable, and force
|
|
// path aliases so drive letters in paths returned in queries
|
|
// match the drive letter of the removable drive.
|
|
//
|
|
|
|
reg.Set( wcsIsReadOnly, TRUE );
|
|
reg.Set( wcsIsRemovableCatalog, TRUE );
|
|
reg.Set( wcsForcePathAlias, TRUE );
|
|
|
|
reg.CreateKey( wcsCatalogScopes, fExisted );
|
|
}
|
|
|
|
//
|
|
// Add a fixup for the root of the volume in case the drive letter
|
|
// is different from where the catalog was built.
|
|
//
|
|
|
|
WCHAR awcPath[ 20 ];
|
|
wcscpy( awcPath, L"x:\\catalog.wci" );
|
|
awcPath[0] = _wcDrive;
|
|
WCHAR wcScope = GetDriveLetterOfAnyScope( awcPath );
|
|
|
|
ciDebugOut(( DEB_ITRACE, "scope drive: '%wc'\n", wcScope ));
|
|
|
|
if ( 0 != wcScope )
|
|
{
|
|
CWin32RegAccess reg( HKEY_LOCAL_MACHINE, awcScopes );
|
|
|
|
WCHAR awcValue[10];
|
|
wcscpy( awcValue, L"x:\\,," );
|
|
awcValue[0] = _wcDrive;
|
|
|
|
WCHAR awcScope[10];
|
|
wcscpy( awcScope, L"x:\\" );
|
|
awcScope[0] = wcScope;
|
|
|
|
reg.Set( awcScope, awcValue );
|
|
}
|
|
} //Create
|
|
|
|
//+-------------------------------------------------------------------------
|
|
//
|
|
// Method: CRemovableCatalog::Destroy, public
|
|
//
|
|
// Synopsis: Destroys temporary registry entries for the catalog
|
|
//
|
|
// History: 6-Apr-99 dlee Created.
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
void CRemovableCatalog::Destroy()
|
|
{
|
|
// Ignore failures here...
|
|
|
|
WCHAR awcCat[40];
|
|
MakeCatalogName( awcCat );
|
|
|
|
WCHAR awcCatalog[200];
|
|
wsprintf( awcCatalog, L"%ws\\%ws", wcsRegCatalogsSubKey, awcCat );
|
|
|
|
TRY
|
|
{
|
|
// Remove the scopes and properties keys
|
|
|
|
{
|
|
CWin32RegAccess reg( HKEY_LOCAL_MACHINE, awcCatalog );
|
|
reg.RemoveKey( wcsCatalogScopes );
|
|
reg.RemoveKey( wcsCatalogProperties );
|
|
}
|
|
|
|
// Remove the catalog key
|
|
|
|
{
|
|
CWin32RegAccess reg( HKEY_LOCAL_MACHINE, wcsRegCatalogsSubKey );
|
|
reg.RemoveKey( awcCat );
|
|
}
|
|
}
|
|
CATCH( CException, e )
|
|
{
|
|
// ignore it -- we tried.
|
|
}
|
|
END_CATCH
|
|
} //Destroy
|
|
|