Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

407 lines
13 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 2000.
//
// File: svccatpx.hxx
//
// Contents: client-side proxy to SVC catalog.
//
// History: 28-Feb-1994 KyleP Created
// 16-Sep-1996 dlee ported from ofs to cisvc
//
//--------------------------------------------------------------------------
#pragma once
#include <catalog.hxx>
#include <proxymsg.hxx>
#include <sizeser.hxx>
class CPidMapper;
//+-------------------------------------------------------------------------
//
// Class: CSvcCatProxy
//
// Purpose: Proxy to SVC catalog
//
// 16-Sep-1996 dlee created
// 08-Apr-1998 kitmanh added SetCatState
//
//--------------------------------------------------------------------------
class CSvcCatProxy : public PCatalog
{
public:
CSvcCatProxy( WCHAR const *pwcMachine,
IDBProperties * pDbProperties ) :
_client( pwcMachine, pDbProperties )
{
}
~CSvcCatProxy()
{
TRY
{
_client.Disconnect();
}
CATCH( CException, e )
{
//
// Ignore failure to disconnect -- we'll close the
// connection soon anyway.
//
}
END_CATCH;
}
// Tell the world we are a real catalog ...
BOOL IsNullCatalog()
{
return FALSE;
}
unsigned WorkIdToPath ( WORKID wid, CFunnyPath& funnyPath )
{ Win4Assert( !"Not implemented" ); return 0; }
WORKID PathToWorkId( const CLowerFunnyPath & lcaseFunnyPath, const BOOL fCreate )
{ Win4Assert( !"Not implemented" ); return 0; }
PROPID PropertyToPropId( CFullPropSpec const & ps,
BOOL fCreate = FALSE )
{ Win4Assert( !"Not implemented" ); return 0; }
ULONG_PTR BeginCacheTransaction()
{
CProxyMessage request( pmBeginCacheTransaction );
CPMBeginCacheTransactionOut reply;
DWORD cbReply;
_client.DataWriteRead( &request,
sizeof request,
&reply,
sizeof reply,
cbReply );
return reply.GetToken();
}
void SetupCache( CFullPropSpec const & ps,
ULONG vt,
ULONG cbMaxLen,
ULONG_PTR ulToken,
BOOL fCanBeModified,
DWORD dwStoreLevel )
{
CSizeSerStream stmSize;
ps.Marshall( stmSize );
ULONG cbRequest = AlignBlock( sizeof CPMSetupCacheIn + stmSize.Size(),
sizeof ULONG );
XArray<BYTE> xRequest( cbRequest );
CPMSetupCacheIn *pRequest = new( xRequest.Get() )
CPMSetupCacheIn( stmSize.Size(), ulToken, vt, cbMaxLen,
fCanBeModified, dwStoreLevel );
CMemSerStream stmMem( pRequest->GetPS(), stmSize.Size() );
ps.Marshall( stmMem );
pRequest->SetCheckSum( xRequest.SizeOf() );
CProxyMessage reply;
DWORD cbReply;
_client.DataWriteRead( pRequest,
xRequest.SizeOf(),
&reply,
sizeof reply,
cbReply );
}
void EndCacheTransaction( ULONG_PTR ulToken, BOOL fCommit )
{
CPMEndCacheTransactionIn request( ulToken, fCommit );
CProxyMessage reply;
DWORD cbReply;
_client.DataWriteRead( &request,
sizeof request,
&reply,
sizeof reply,
cbReply );
}
BOOL StoreValue( WORKID wid,
CFullPropSpec const & ps,
CStorageVariant const & var )
{ Win4Assert( !"Not implemented" ); return 0; }
BOOL FetchValue( WORKID wid,
PROPID pid,
PROPVARIANT * pbData,
unsigned * pcb )
{ Win4Assert( !"Not implemented" ); return 0; }
BOOL FetchValue( WORKID wid,
CFullPropSpec const & ps,
PROPVARIANT & var )
{ Win4Assert( !"Not implemented" ); return 0; }
BOOL FetchValue( CCompositePropRecord * pRec,
PROPID pid,
PROPVARIANT * pbData,
unsigned * pcb )
{ Win4Assert( !"Not implemented" ); return 0; }
CCompositePropRecord * OpenValueRecord( WORKID wid, BYTE * pb )
{ Win4Assert( !"Not implemented" ); return 0; }
void CloseValueRecord( CCompositePropRecord * pRec )
{ Win4Assert( !"Not implemented" ); }
BOOL StoreSecurity( WORKID wid,
PSECURITY_DESCRIPTOR pSD,
ULONG cbSD )
{ Win4Assert( !"Not implemented" ); return 0; }
SDID FetchSDID( CCompositePropRecord * pRec,
WORKID wid )
{ Win4Assert( !"Not implemented" ); return 0; }
BOOL AccessCheck( SDID sdid,
HANDLE hToken,
ACCESS_MASK am,
BOOL & fGranted )
{ Win4Assert( !"Not implemented" ); return 0; }
void MarkUnReachable( WORKID wid )
{ Win4Assert( !"Not implemented" ); }
PStorage& GetStorage()
{ Win4Assert( !"Not implemented" ); return *(PStorage *)0; }
CRWStore * ComputeRelevantWords(ULONG cRows,ULONG cRW,
WORKID *pwid,
PARTITIONID partid)
{ Win4Assert( !"Not implemented" ); return 0; }
CRWStore * RetrieveRelevantWords(BOOL fAcquire,
PARTITIONID partid)
{ Win4Assert( !"Not implemented" ); return 0; }
unsigned ReserveUpdate( WORKID wid )
{ Win4Assert( !"Not implemented" ); return 0; }
void Update( unsigned iHint,
WORKID wid,
PARTITIONID partid,
USN usn,
ULONG flags )
{ Win4Assert( !"Not implemented" ); }
void CatalogState( ULONG & cDocuments, ULONG & cPendingScans, ULONG & fState )
{ Win4Assert( !"Not implemented" ); }
void DisableUsnUpdate( PARTITIONID partid )
{ Win4Assert( !"Not implemented" ); }
void EnableUsnUpdate( PARTITIONID partid )
{ Win4Assert( !"Not implemented" ); }
void UpdateDocuments( WCHAR const* rootPath,
ULONG flag=UPD_FULL )
{
XArray<BYTE> xRequest( CPMUpdateDocumentsIn::SizeOf( rootPath ) );
CPMUpdateDocumentsIn * pRequest = new( xRequest.Get() )
CPMUpdateDocumentsIn( rootPath,
flag );
CProxyMessage reply;
DWORD cbRead;
_client.DataWriteRead( pRequest,
xRequest.SizeOf(),
&reply,
sizeof reply,
cbRead );
}
void AddScopeToCI( WCHAR const * rootPath )
{
unsigned cb = CPMAddScopeIn::SizeOf( rootPath );
XArray<BYTE> abRequest( cb );
CPMAddScopeIn *pRequest = new( abRequest.Get() )
CPMAddScopeIn( rootPath );
CProxyMessage reply;
DWORD cbReply;
_client.DataWriteRead( pRequest,
cb,
&reply,
sizeof reply,
cbReply );
}
void RemoveScopeFromCI( WCHAR const * rootPath )
{
unsigned cb = CPMRemoveScopeIn::SizeOf( rootPath );
XArray<BYTE> abRequest( cb );
CPMRemoveScopeIn *pRequest = new( abRequest.Get() )
CPMRemoveScopeIn( rootPath );
CProxyMessage reply;
DWORD cbReply;
_client.DataWriteRead( pRequest,
cb,
&reply,
sizeof reply,
cbReply );
}
unsigned WorkIdToVirtualPath( WORKID wid,
unsigned cSkip,
XGrowable<WCHAR> & xBuf )
{
Win4Assert( !"Not implemented" );
return 0;
}
BOOL VirtualToPhysicalRoot( WCHAR const * pwcVPath,
unsigned ccVPath,
XGrowable<WCHAR> & xwcsVRoot,
unsigned & ccVRoot,
CLowerFunnyPath & lcaseFunnyPRoot,
unsigned & ccPRoot,
unsigned & iBmk )
{ Win4Assert( !"Not implemented" ); return 0; }
BOOL VirtualToAllPhysicalRoots( WCHAR const * pwcVPath,
unsigned ccVPath,
XGrowable<WCHAR> & xwcsVRoot,
unsigned & ccVRoot,
CLowerFunnyPath & lcaseFunnyPRoot,
unsigned & ccPRoot,
ULONG & ulType,
unsigned & iBmk )
{ Win4Assert( !"Not implemented" ); return 0; }
ULONG EnumerateVRoot( XGrowable<WCHAR> & xwcVRoot,
unsigned & ccVRoot,
CLowerFunnyPath & lcaseFunnyPRoot,
unsigned & ccPRoot,
unsigned & iBmk )
{ Win4Assert( !"Not implemented" ); return 0; }
void SetPartition( PARTITIONID PartId )
{
_PartId = PartId;
// send it
}
PARTITIONID GetPartition() const { return _PartId; }
SCODE CreateContentIndex()
{ Win4Assert( !"Not implemented" ); return 0; }
void EmptyContentIndex()
{ Win4Assert( !"Not implemented" ); }
void Shutdown() {}
NTSTATUS ForceMerge( PARTITIONID partID )
{
CPMForceMergeIn request( partID );
CProxyMessage reply;
DWORD cbRead;
_client.DataWriteRead( &request,
sizeof request,
&reply,
sizeof reply,
cbRead );
return STATUS_SUCCESS;
}
NTSTATUS AbortMerge( PARTITIONID partID )
{
CPMAbortMergeIn request( partID );
CProxyMessage reply;
DWORD cbRead;
_client.DataWriteRead( &request,
sizeof request,
&reply,
sizeof reply,
cbRead );
return STATUS_SUCCESS;
}
NTSTATUS SetCatState( PARTITIONID partID,
WCHAR const * pwcsCat,
DWORD dwNewState,
DWORD * pdwOldState )
{
XArray<BYTE> xRequest( CPMSetCatStateIn::SizeOf( pwcsCat ) );
CPMSetCatStateIn * pRequest = new( xRequest.Get() )
CPMSetCatStateIn( partID,
pwcsCat,
dwNewState );
CPMSetCatStateOut reply;
DWORD cbRead;
_client.DataWriteRead( pRequest,
xRequest.SizeOf(),
&reply,
sizeof reply,
cbRead );
*pdwOldState = reply.GetOldState();
return STATUS_SUCCESS;
}
#if CIDBG == 1
void DumpWorkId( WORKID wid, ULONG iid, BYTE * pb, ULONG cb )
{ Win4Assert( !"Not implemented" ); }
#endif // CIDBG
WCHAR * GetDriveName() { Win4Assert( !"never called" ); return 0; }
void PidMapToPidRemap( const CPidMapper & pidMap,
CPidRemapper & pidRemap )
{ Win4Assert( !"Not implemented" ); }
NTSTATUS CiState( CI_STATE & state )
{
DWORD cbOriginal = state.cbStruct;
CPMCiStateInOut request( cbOriginal );
CPMCiStateInOut reply;
DWORD cbReply;
_client.DataWriteRead( &request,
sizeof request,
&reply,
sizeof reply,
cbReply );
CI_STATE & stateOut = reply.GetState();
Win4Assert( stateOut.cbStruct <= sizeof CI_STATE );
Win4Assert( stateOut.cbStruct <= cbOriginal );
RtlZeroMemory( &state, cbOriginal );
RtlCopyMemory( &state,
&stateOut,
stateOut.cbStruct );
return STATUS_SUCCESS;
}
void FlushScanStatus()
{ Win4Assert( !"Not implemented" ); }
BOOL IsEligibleForFiltering( WCHAR const* wcsDirPath )
{ Win4Assert( !"Not implemented" ); return 0; }
CCiRegParams * GetRegParams() { Win4Assert( !"not implemented" ); return 0; }
CScopeFixup * GetScopeFixup() { Win4Assert( !"not implemented" ); return 0; }
private:
PARTITIONID _PartId;
CRequestClient _client;
};