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.
 
 
 
 
 
 

154 lines
4.0 KiB

//+---------------------------------------------------------------------------
//
// 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