301 lines
7.3 KiB
C++
301 lines
7.3 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1997 - 1998.
|
|
//
|
|
// File: CINULCAT.HXX
|
|
//
|
|
// Contents: Null catalog
|
|
//
|
|
// History: 09-Jul-97 KrishnaN Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
#pragma once
|
|
|
|
#include <catalog.hxx>
|
|
#include <spropmap.hxx>
|
|
#include <cistore.hxx>
|
|
#include <pidtable.hxx>
|
|
#include <imprsnat.hxx>
|
|
#include <ciintf.h>
|
|
#include <pidremap.hxx>
|
|
|
|
#include "statmon.hxx"
|
|
|
|
class CClientDocStore;
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Class: CiNullCat
|
|
//
|
|
// Purpose: Null Catalog.
|
|
//
|
|
// History: 09-Jul-97 KrishnaN Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
class CiNullCat: public PCatalog
|
|
{
|
|
public:
|
|
|
|
CiNullCat ( CClientDocStore & docStore);
|
|
~CiNullCat ();
|
|
|
|
// Tell the world we are a dummy ...
|
|
BOOL IsNullCatalog()
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
const WCHAR * GetName()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
const WCHAR * GetCatDir()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
PStorage& GetStorage ()
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
return *(CiStorage *)0;
|
|
}
|
|
|
|
WCHAR * GetDriveName()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
CCiScopeTable * GetScopeTable()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
CScopeFixup * GetScopeFixup()
|
|
{
|
|
return &_scopeFixup;
|
|
}
|
|
|
|
|
|
unsigned WorkIdToPath ( WORKID wid, CFunnyPath& funnyPath )
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
return 0;
|
|
}
|
|
|
|
void UpdateDocuments( WCHAR const* rootPath=0,
|
|
ULONG flag=UPD_FULL )
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
}
|
|
|
|
unsigned ReserveUpdate( WORKID wid )
|
|
{
|
|
Win4Assert( !"Downlevel CI feature called" );
|
|
THROW( CException( E_NOTIMPL ) );
|
|
return 1;
|
|
}
|
|
|
|
NTSTATUS ForceMerge( PARTITIONID partID )
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
return 0;
|
|
}
|
|
|
|
NTSTATUS AbortMerge( PARTITIONID partID )
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
return 0;
|
|
}
|
|
|
|
void SetPartition( PARTITIONID PartId )
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
}
|
|
|
|
PARTITIONID GetPartition() const
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
return 1;
|
|
}
|
|
|
|
const WCHAR * GetScopesKey()
|
|
{
|
|
return _xScopesKey.Get();
|
|
}
|
|
|
|
void FlushScanStatus()
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
}
|
|
|
|
void Update( unsigned iHint,
|
|
WORKID wid,
|
|
PARTITIONID partid,
|
|
USN usn,
|
|
ULONG flags )
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
}
|
|
|
|
SCODE CreateContentIndex()
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
void EmptyContentIndex()
|
|
{
|
|
Win4Assert( !"Not supported for Null Catalog" );
|
|
}
|
|
|
|
void ShutdownPhase2();
|
|
|
|
SCODE CiState( CI_STATE & state );
|
|
|
|
void HandleError( NTSTATUS status );
|
|
|
|
BOOL IsLowOnDisk() const
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Support for CiFramework.
|
|
//
|
|
void StartupCiFrameWork( ICiManager * pCiManager );
|
|
unsigned FixupPath( WCHAR const * pwcOriginal,
|
|
WCHAR * pwcResult,
|
|
unsigned cwcResult,
|
|
unsigned cSkip )
|
|
{
|
|
if ( 0 == cSkip )
|
|
return _scopeFixup.Fixup( pwcOriginal, pwcResult, cwcResult, cSkip );
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
void InverseFixupPath( CLowerFunnyPath & lcaseFunnyPath )
|
|
{
|
|
_scopeFixup.InverseFixup( lcaseFunnyPath );
|
|
}
|
|
|
|
CImpersonationTokenCache * GetImpersonationTokenCache()
|
|
{ return & _impersonationTokenCache; }
|
|
|
|
void RefreshRegistryParams();
|
|
|
|
ICiManager *CiManager()
|
|
{
|
|
Win4Assert( _xCiManager.GetPointer() );
|
|
return _xCiManager.GetPointer();
|
|
}
|
|
|
|
CCiRegParams * GetRegParams() { return & _regParams; }
|
|
|
|
// Always return a 1. A wid will be obtained later
|
|
// from the bigtable
|
|
WORKID PathToWorkId ( const CLowerFunnyPath &, const BOOL)
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
PROPID PropertyToPropId ( CFullPropSpec const & ps, BOOL fCreate = FALSE )
|
|
{
|
|
return _propMapper.PropertyToPropId( ps, fCreate);
|
|
}
|
|
|
|
CRWStore * ComputeRelevantWords(ULONG cRows,ULONG cRW,
|
|
WORKID *pwid,
|
|
PARTITIONID partid)
|
|
{
|
|
Win4Assert( !"Not supported in Framework" );
|
|
|
|
return 0;
|
|
}
|
|
|
|
CRWStore * RetrieveRelevantWords(BOOL fAcquire,
|
|
PARTITIONID partid)
|
|
{
|
|
Win4Assert( !"Not supported in Framework" );
|
|
|
|
return 0;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Member: CiNullCat::PidMapToPidRemap, public
|
|
//
|
|
// Synopsis: Converts a pidMapperArray into a pidRemapper
|
|
//
|
|
// Arguments: [pidMap] -- a pid mapper to convert into a pid remapper
|
|
// [pidRemap] -- the converted pid remapper;
|
|
//
|
|
// History: 01-Mar-95 DwightKr Created
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
void PidMapToPidRemap( const CPidMapper & pidMap,
|
|
CPidRemapper & pidRemap )
|
|
{
|
|
//
|
|
// Rebuild the pidRemapper
|
|
//
|
|
pidRemap.ReBuild( pidMap );
|
|
};
|
|
|
|
CPidLookupTable & GetPidLookupTable() { return *(CPidLookupTable *)0; }
|
|
|
|
void CiNullCat::SetAdviseStatus();
|
|
|
|
private:
|
|
|
|
BOOL IsInit() { return eStarting != _state; }
|
|
|
|
WCHAR const * GetScope( const WCHAR * wcsScope );
|
|
|
|
void LogCiFailure( NTSTATUS status );
|
|
|
|
BOOL IsStarted() const { return eStarted == _state; }
|
|
|
|
BOOL IsShutdown() const { return eShutdown == _state; }
|
|
|
|
void SetupScopeFixups();
|
|
|
|
enum EState
|
|
{
|
|
eStarting,
|
|
eStarted,
|
|
eShutdown
|
|
};
|
|
|
|
ULONG _ulSignature; // Signature of start of privates
|
|
|
|
EState _state;
|
|
|
|
CImpersonationTokenCache _impersonationTokenCache;
|
|
CScopeFixup _scopeFixup; // path fixup for remote clients
|
|
|
|
CClientDocStore & _docStore; // Document store interface
|
|
BOOL _fInitialized; // Set to true when fully initilaized.
|
|
// Optimization - test before doing a wait.
|
|
CMutexSem _mutex;
|
|
CMutexSem _mtxAdmin; // Lock for admin operations.
|
|
XArray<WCHAR> _xScopesKey; // handy registry key
|
|
CCiRegParams _regParams;
|
|
//
|
|
// This array will hold the mapping of GUID\DISPID and GUID\Name to pid.
|
|
// "Real" pids are allocated sequentially, and are good only for the life
|
|
// of the catalog object.
|
|
//
|
|
CStandardPropMapper _propMapper;
|
|
|
|
//
|
|
// CI Framework support.
|
|
//
|
|
XInterface<ICiManager> _xCiManager; // ContentIndex manager
|
|
XInterface<ICiCAdviseStatus> _xAdviseStatus;
|
|
};
|