|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1998 - 1999.
//
// File: tcatcnfg.cxx
//
// Contents: Test program for catalog configuration
//
// History: 24 Nov 1998 AlanW Created
//
//--------------------------------------------------------------------------
#include "pch.cxx"
#pragma hdrstop
#include "catcnfg.hxx"
WCHAR g_awcProfilePath[MAX_PATH];
const WCHAR wszRegProfileKey[] = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList"; const WCHAR wszRegProfileValue[] = L"ProfilesDirectory";
//
// DLL module instance handle
//
HINSTANCE MyModuleHandle = (HINSTANCE)INVALID_HANDLE_VALUE;
ULONG isInfoLevel;
inline ULONG MB( ULONGLONG cb ) { const ONE_MB = (1024*1024);
return (ULONG) ((cb+ONE_MB/2) / ONE_MB); }
void PrintDriveInfo( CCatalogConfig & CatConfig ); void ExcludeSpecialLocations( CCatalogConfig & Cat );
WCHAR g_awcSystemDir[MAX_PATH];
__cdecl main() { CError Err;
GetSystemDirectory( g_awcSystemDir, sizeof g_awcSystemDir / sizeof WCHAR ); CCatalogConfig CatConfig(Err);
CatConfig.InitDriveList(); //printf("\nBefore pagefile reservation:\n" );
//PrintDriveInfo( CatConfig );
//CatConfig.ReservePageFileData();
printf("\nBefore catalog configuration:\n" ); PrintDriveInfo( CatConfig );
//
// Find the default profile path (Usually %windir%\Profiles)
//
CWin32RegAccess regProfileKey( HKEY_LOCAL_MACHINE, wszRegProfileKey );
g_awcProfilePath[0] = L'\0'; WCHAR wcTemp[MAX_PATH+1];
if ( regProfileKey.Get( wszRegProfileValue, wcTemp, NUMELEM(wcTemp) ) ) { unsigned ccTemp2 = ExpandEnvironmentStrings( wcTemp, g_awcProfilePath, NUMELEM(g_awcProfilePath) ); }
CatConfig.ConfigureDefaultCatalog(g_awcProfilePath); ExcludeSpecialLocations( CatConfig );
printf("\nAfter catalog configuration:\n" ); PrintDriveInfo( CatConfig );
printf("\nCatalog drive:\n\t%ws\n", CatConfig.GetCatalogDrive());
WCHAR const * pwszScope; for (unsigned i = 0; pwszScope = CatConfig.GetIncludedScope( i ); i++) { if ( 0 == i ) printf("\nIncluded scopes:\n"); printf("\t%ws\n", pwszScope ); }
for (i = 0; pwszScope = CatConfig.GetExcludedScope( i ); i++) { if ( 0 == i ) printf("\nExcluded scopes:\n"); printf("\t%ws\n", pwszScope ); }
return 0; }
void PrintDriveInfo( CCatalogConfig & CatConfig ) { printf("Drive\tFree MB Resv MB Tot. MB\n");
CDriveInformation const * pDriveInfo = 0; for ( unsigned i=0; pDriveInfo = CatConfig.GetDriveInfo(i); i++ ) { printf("%s\t%7d\t%7d\t%7d", pDriveInfo->GetDriveName(), MB(pDriveInfo->GetAvailableSpace()), MB(pDriveInfo->GetReservedSpace()), MB(pDriveInfo->GetTotalSpace()) );
if ( pDriveInfo->IsNtfs() ) printf(" NTFS"); else if ( !pDriveInfo->IsBootDrive() ) printf(" FAT");
if ( pDriveInfo->IsSystemDrive() ) printf(" SystemDrive"); if ( pDriveInfo->IsBootDrive() ) printf(" BootDrive");
//if ( pDriveInfo->IsNtfs() )
// printf(" SupportsSecurity");
//if ( pDriveInfo->SupportsCompression() )
// printf(" SupportsCompression");
if ( pDriveInfo->HasPageFile() ) printf(" PageFile");
printf("\n"); }
return; }
//+-------------------------------------------------------------------------
//
// Function: ISError
//
// Synopsis: Reports a non-recoverable Index Server Install error
//
// Arguments: id -- resource identifier for the error string
//
// History: 8-Jan-97 dlee Created
//
//--------------------------------------------------------------------------
void ISError( UINT id, CError &Err, LogSeverity Severity ) { // CResString msg( id );
// CResString title( IS_MSG_INDEX_SERVER );
Err.Report( Severity, L"Error 0x%08x\n", id );
if ( LogSevFatalError == Severity ) { //isDebugOut(( "ISError, abort install: '%ws'\n", msg.Get() ));
//g_fInstallAborted = TRUE;
exit( 1 ); }
} //ISError
CError::CError( ) { }
CError::~CError( ) { }
void CError::Report( LogSeverity Severity, WCHAR const * MessageString, ...) { va_list va; va_start(va, MessageString);
wvsprintf(_awcMsg, MessageString, va);
va_end(va);
wprintf(L"setupqry: %s\r\n", _awcMsg); }
//+-------------------------------------------------------------------------
//
// Function: ExcludeSpecialLocations, private
//
// Synopsis: Writes profile-based exclude scopes into the registry
//
// Arguments: none
//
// History: 28-Aug-1998 KyleP Created
//
//--------------------------------------------------------------------------
WCHAR const wszRegShellSpecialPathsKey[] = L".DEFAULT\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";
WCHAR const * const awszRegShellSpecialPathsValue[] = { L"AppData", L"Cache", L"Local Settings" };
WCHAR const wszUserProfile[] = L"%USERPROFILE%";
void ExcludeSpecialLocations( CCatalogConfig & Cat ) { // CWin32RegAccess regScopes( HKEY_LOCAL_MACHINE, wcsRegSystemScopesSubKey );
//
// First, find the default profile path (Usually %windir%\Profiles)
//
WCHAR wcTemp[MAX_PATH+1];
if ( g_awcProfilePath[0] ) { WCHAR wcTemp2[MAX_PATH+1]; wcscpy( wcTemp2, g_awcProfilePath ); unsigned ccTemp2 = wcslen( wcTemp2 );
//
// Append the wildcard, for user profile directory
//
wcscpy( wcTemp2 + ccTemp2, L"\\*\\" ); ccTemp2 += 3;
//
// Go through and look for special shell paths, which just happen
// to include all our special cases too.
//
CWin32RegAccess regShellSpecialPathsKey( HKEY_USERS, wszRegShellSpecialPathsKey );
for ( unsigned i = 0; i < NUMELEM(awszRegShellSpecialPathsValue); i++ ) { if ( regShellSpecialPathsKey.Get( awszRegShellSpecialPathsValue[i], wcTemp, NUMELEM(wcTemp) ) ) { if ( RtlEqualMemory( wszUserProfile, wcTemp, sizeof(wszUserProfile) - sizeof(WCHAR) ) ) { wcscpy( wcTemp2 + ccTemp2, wcTemp + NUMELEM(wszUserProfile) ); wcscpy( wcTemp, wcTemp2 ); } else if ( wcschr( wcTemp, L'%' ) != 0 ) { WCHAR wcTemp3[MAX_PATH+1]; unsigned ccTemp3 = ExpandEnvironmentStrings( wcTemp, wcTemp3, NUMELEM(wcTemp3) ); if ( 0 != ccTemp3 ) wcscpy( wcTemp, wcTemp3 ); }
wcscat( wcTemp, L"\\*" ); isDebugOut(( "Exclude: %ws\n", wcTemp ));
Cat.AddExcludedDirOrPattern( wcTemp ); } } } }
#if 0
//+-------------------------------------------------------------------------
//
// Function: ExcludeSpecialLocations, private
//
// Synopsis: Writes profile-based exclude scopes into the registry
//
// Arguments: none
//
// History: 28-Aug-1998 KyleP Created
//
//--------------------------------------------------------------------------
WCHAR const wszRegProfileKey[] = L"Software\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList"; WCHAR const wszRegProfileValue[] = L"ProfilesDirectory";
WCHAR const wszRegShellSpecialPathsKey[] = L".DEFAULT\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\User Shell Folders";
WCHAR const * const awszRegShellSpecialPathsValue[] = { L"AppData", L"Cache", L"Local Settings" };
WCHAR const wszUserProfile[] = L"%USERPROFILE%";
void ExcludeSpecialLocations( CCatalogConfig & Cat ) { // CWin32RegAccess regScopes( HKEY_LOCAL_MACHINE, wcsRegSystemScopesSubKey );
//
// First, find the default profile path (Usually %windir%\Profiles)
//
CWin32RegAccess regProfileKey( HKEY_LOCAL_MACHINE, wszRegProfileKey );
WCHAR wcTemp[MAX_PATH+1];
if ( regProfileKey.Get( wszRegProfileValue, wcTemp, NUMELEM(wcTemp) ) ) { WCHAR wcTemp2[MAX_PATH+1]; unsigned ccTemp2 = ExpandEnvironmentStrings( wcTemp, wcTemp2, NUMELEM(wcTemp2) );
if ( 0 != ccTemp2 ) { //
// Append the wildcard, for user profile directory
//
ccTemp2--; // don't include null terminator
wcscpy( wcTemp2 + ccTemp2, L"\\*\\" ); ccTemp2 += 3;
//
// Go through and look for special shell paths, which just happen
// to include all our special cases too.
//
CWin32RegAccess regShellSpecialPathsKey( HKEY_USERS, wszRegShellSpecialPathsKey );
for ( unsigned i = 0; i < NUMELEM(awszRegShellSpecialPathsValue); i++ ) { if ( regShellSpecialPathsKey.Get( awszRegShellSpecialPathsValue[i], wcTemp, NUMELEM(wcTemp) ) ) { if ( RtlEqualMemory( wszUserProfile, wcTemp, sizeof(wszUserProfile) - sizeof(WCHAR) ) ) { wcscpy( wcTemp2 + ccTemp2, wcTemp + NUMELEM(wszUserProfile) ); wcscpy( wcTemp, wcTemp2 ); } else if ( wcschr( wcTemp, L'%' ) != 0 ) { WCHAR wcTemp3[MAX_PATH+1]; unsigned ccTemp3 = ExpandEnvironmentStrings( wcTemp, wcTemp3, NUMELEM(wcTemp3) ); if ( 0 != ccTemp3 ) wcscpy( wcTemp, wcTemp3 ); }
wcscat( wcTemp, L"\\*" ); isDebugOut(( "Exclude: %ws\n", wcTemp ));
Cat.AddExcludedDirOrPattern( wcTemp ); } } } } } #endif //0
|