windows-nt/Source/XPSP1/NT/inetsrv/query/setupqry/tcatcnfg.cxx
2020-09-26 16:20:57 +08:00

369 lines
10 KiB
C++

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