|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1996 - 2000.
//
// File: proxymsg.hxx
//
// Contents: Defines messages and related constants for communication over
// a named pipe between query clients and servers.
//
// Classes: CProxyMessage
// CPM*
//
// History: 16-Sep-96 dlee Created.
// 24-Aug-99 klam CI Win64 version info
//
//--------------------------------------------------------------------------
#pragma once
#define CI_PIPE_NAME L"ci_skads"
#define CI_SERVER_PIPE_NAME L"\\\\.\\pipe\\ci_skads"
#define IsCi64(x) ((x) & 0x10000)
#define pmCiVersion(x) ((x) & ~0x10000)
#ifdef _WIN64
// Low bit on upper word indicates 64 bit machine
const int pmClientVersion = 0x10008; const int pmServerVersion = 0x10007; #else
const int pmClientVersion = 8; const int pmServerVersion = 7; #endif
// This alignment function is useful for asserts
inline BOOL isQWordAligned( void const * p ) { return 0 == ( ( (ULONG_PTR) p ) & 0x7 ); }
inline BOOL isDWordAligned( ULONG ul ) { return 0 == ( ul & 0x3 ); }
// note: pipe writes are limited to 64k in Win32. Also, these buffers are
// allocated from non-paged-pool on the server.
const ULONG cbMaxProxyBuffer = 0x4000; //16384
const int pmConnect = 200; // 0xc8
const int pmDisconnect = 201; // 0xc9
const int pmCreateQuery = 202; // 0xca
const int pmFreeCursor = 203; // 0xcb
const int pmGetRows = 204; // 0xcc
const int pmRatioFinished = 205; // 0xcd
const int pmCompareBmk = 206; // 0xce
const int pmGetApproximatePosition = 207; // 0xcf
const int pmSetBindings = 208; // 0xd0
const int pmGetNotify = 209; // 0xd1
const int pmSendNotify = 210; // 0xd2
const int pmSetWatchMode = 211; // 0xd3
const int pmGetWatchInfo = 212; // 0xd4
const int pmShrinkWatchRegion = 213; // 0xd5
const int pmRefresh = 214; // 0xd6
const int pmGetQueryStatus = 215; // 0xd7
const int pmWidToPath = 216; // 0xd8
const int pmCiState = 217; // 0xd9
const int pmBeginCacheTransaction = 218; // 0xda
const int pmSetupCache = 219; // 0xdb
const int pmEndCacheTransaction = 220; // 0xdc
const int pmAddScope = 221; // 0xdd
const int pmRemoveScope = 222; // 0xde
const int pmAddVirtualScope = 223; // 0xdf
const int pmRemoveVirtualScope = 224; // 0xe0
const int pmForceMerge = 225; // 0xe1
const int pmAbortMerge = 226; // 0xe2
const int pmSetPartition = 227; // 0xe3
const int pmFetchValue = 228; // 0xe4
const int pmWorkIdToPath = 229; // 0xe5
const int pmUpdateDocuments = 230; // 0xe6
const int pmGetQueryStatusEx = 231; // 0xe7
const int pmRestartPosition = 232; // 0xe8
const int pmStopAsynch = 233; // 0xe9
const int pmStartWatching = 234; // 0xea
const int pmStopWatching = 235; // 0xeb
const int pmSetCatState = 236; // 0xec
const int cProxyMessages = 37;
//+-------------------------------------------------------------------------
//
// Class: CProxyMessage
//
// Synopsis: All proxy messages derive from this message
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CProxyMessage { public: void * operator new( size_t size, void *pv ) { return pv; }
#if _MSC_VER >= 1200
void operator delete( void * pv, void * ppv ) {} #else
void operator delete( void * pv ) {} #endif
CProxyMessage( int msg ) : _msg( msg ), _status( S_OK ), _ulReserved1( 0 ), _ulReserved2( 0 ) {}
CProxyMessage() {}
int GetMessage() { return _msg; } void SetMessage( int msg ) { _msg = msg; }
void SetStatus( HRESULT hr ) { _status = hr; } HRESULT GetStatus() { return _status; }
BYTE * Data() { return (BYTE *) ( this + 1 ); }
static ULONG ProxyCheckSum( BYTE const * pb, ULONG cb ) { Win4Assert( isQWordAligned( pb ) ); Win4Assert( isDWordAligned( cb ) );
ULONG x = 0; ULONG * pul = (ULONG *) pb; ULONG cul = cb / sizeof ULONG;
for ( ULONG i = 0; i < cul; i++ ) x += pul[i];
return x ^ 0x59533959; // mask that we're using simple checksum
}
void SetCheckSum( ULONG cb ) { _ulCheckSum = ComputeCheckSum( cb ); }
void ValidateCheckSum( int iClientVersion, ULONG cb ) { // if it's a recent client or they passed a checksum, validate it
if ( iClientVersion >= 8 || 0 != _ulCheckSum ) { if ( ComputeCheckSum( cb ) != _ulCheckSum ) THROW( CException( STATUS_INVALID_PARAMETER ) ); } }
protected:
ULONG GetReserved1() { return _ulReserved1; } void SetReserved1( ULONG ul ) { _ulReserved1 = ul; }
ULONG GetReserved2() { return _ulReserved2; } void SetReserved2( ULONG ul ) { _ulReserved2 = ul; }
//
// We know that there are 2 reserved fields that together are guaranteed
// to hold a full ULONG_PTR even on Win64 systems. Users of reserved
// space have to know what they are doing.
//
ULONG_PTR * GetReservedSpace() { return (ULONG_PTR *) &_ulReserved1; }
private:
// make sure the standard operator new isn't called
void * operator new ( size_t size ) { Win4Assert( !"don't call me!" ); return 0; }
ULONG ComputeCheckSum( ULONG cb ) { // Don't include the base class in the checksum, only the _msg,
// since _ulCheckSum will change when we set it
Win4Assert( cb >= sizeof CProxyMessage ); cb -= sizeof CProxyMessage;
return ProxyCheckSum( Data(), cb ) - _msg; }
int _msg; // one of the pm* constants.
HRESULT _status; // sent from server to client, client sets to 0
union { // Some messages use this as the checksum for client to server, but
// it's still available for server to client
ULONG _ulReserved1; // guaranteed to be 0 from v1-v2 client
ULONG _ulCheckSum; // set for >= v8 clients
};
ULONG _ulReserved2; // guaranteed to be 0 from v1-v2 client
// for Win64 this holds the upper half of a pointer
};
//+-------------------------------------------------------------------------
//
// Class: CPMConnectIn
//
// Synopsis: Establishes a connection between the client and the server.
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMConnectIn : public CProxyMessage { public:
static ULONG_PTR Align8Byte( ULONG_PTR cb ) { return (cb + 0x7) & (~0x7); }
static unsigned SizeOf( WCHAR const * pwcClientMachineName, WCHAR const * pwcClientUserName, ULONG cbBlob = 0, ULONG cbBlob2 = 0 ) { unsigned cb = sizeof CPMConnectIn;
cb += sizeof WCHAR * ( 1 + wcslen( pwcClientMachineName ) ); cb += sizeof WCHAR * ( 1 + wcslen( pwcClientUserName ) );
//
// Align 8 for the blobs
//
if ( 0 != cbBlob ) { cb = (unsigned)Align8Byte(cb); cb += (unsigned)Align8Byte(cbBlob); } if ( 0 != cbBlob2 ) { cb = (unsigned)Align8Byte(cb); cb += (unsigned)Align8Byte(cbBlob2); }
return cb; }
CPMConnectIn( WCHAR const * pwcClientMachineName, WCHAR const * pwcClientUserName, BOOL fClientIsRemote, ULONG cbBlob, ULONG cbBlob2, int iClientVersion = pmClientVersion ) : CProxyMessage( pmConnect ), _fClientIsRemote( fClientIsRemote ), _iClientVersion( iClientVersion ), _cbBlob( cbBlob ), _cbBlob2( cbBlob2 ) { wcscpy( GetClientMachineName(), pwcClientMachineName ); wcscpy( GetClientUserName(), pwcClientUserName ); }
BYTE * GetBlobStartAddr() const { BYTE * pbAddr = 0;
if ( 0 != _cbBlob ) { WCHAR * pwcsClientUserName = GetClientUserName();
pbAddr = (BYTE *) (pwcsClientUserName + wcslen(pwcsClientUserName)+1); pbAddr = (BYTE *) Align8Byte( (ULONG_PTR) pbAddr ); }
return pbAddr; }
BYTE * GetBlob2StartAddr() const { return GetBlobStartAddr() + Align8Byte(GetBlobSize()); }
ULONG GetBlobSize() const { return _cbBlob; }
ULONG GetBlob2Size() const { return _cbBlob2; }
BOOL IsClientRemote() { return _fClientIsRemote; }
WCHAR * GetClientMachineName() const { return (WCHAR *) ( this + 1 ); }
WCHAR * GetClientUserName() const { WCHAR *pwcMach = GetClientMachineName(); return pwcMach + 1 + wcslen( pwcMach ); }
int GetClientVersion() { return _iClientVersion; }
private:
int _iClientVersion; BOOL _fClientIsRemote; ULONG _cbBlob; union { // version 5 clients have a blob1, but no blob2. version
// 6 clients have both a blob1 and a blob2 directly after
// blob1.
// The rest of the reserved area is still unused.
LONGLONG _reserved[2]; struct { ULONG _cbBlob2; }; }; };
//+-------------------------------------------------------------------------
//
// Class: CPMConnectOut
//
// Synopsis: A reply from the server to a connect message
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMConnectOut : public CProxyMessage { public: int & ServerVersion() { return _ServerVersion; }
private: int _ServerVersion; LONGLONG _reserved[2]; };
//+-------------------------------------------------------------------------
//
// Class: CPMCreateQueryIn
//
// Synopsis: Message reply for a create query, returns an array of cursors
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMCreateQueryIn : public CProxyMessage { public: CPMCreateQueryIn() : CProxyMessage( pmCreateQuery ) {} };
//+-------------------------------------------------------------------------
//
// Class: CPMCreateQueryOut
//
// Synopsis: Message reply for a create query, returns an array of cursors
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMCreateQueryOut : public CProxyMessage { public: ULONG * GetCursors() { return (ULONG *) ( this + 1 ); }
BOOL & IsTrueSequential() { return _fTrueSequential; } BOOL & IsWorkIdUnique() { return _fWorkIdUnique; }
ULONG_PTR GetServerCookie() { return *GetReservedSpace(); } void SetServerCookie( ULONG_PTR ul ) { *GetReservedSpace() = ul; }
private: BOOL _fTrueSequential; BOOL _fWorkIdUnique; };
//+-------------------------------------------------------------------------
//
// Class: CPMFreeCursorIn
//
// Synopsis: Message to free a cursor
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMFreeCursorIn : public CProxyMessage { public: CPMFreeCursorIn( ULONG hCursor ) : CProxyMessage( pmFreeCursor ), _hCursor( hCursor ) {} ULONG GetCursor() { return _hCursor; }
private: ULONG _hCursor; };
//+-------------------------------------------------------------------------
//
// Class: CPMFreeCursorOut
//
// Synopsis: Message reply to freeing a cursor, returns # of cursors left
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMFreeCursorOut : public CProxyMessage { public: unsigned & CursorsRemaining() { return _cCursorsRemaining; }
private: unsigned _cCursorsRemaining; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetRowsIn
//
// Synopsis: Message for getting rows
//
// History: 16-Sep-96 dlee Created.
// 30-Aug-99 KLam 64 bit changes
//
//--------------------------------------------------------------------------
class CPMGetRowsIn : public CProxyMessage { public: CPMGetRowsIn( ULONG hCursor, unsigned cRowsToTransfer, ULONG fFwdFetch, size_t cbRowWidth, unsigned cbSeek, unsigned cbReserved ) : CProxyMessage( pmGetRows ), _hCursor( hCursor ), _cRowsToTransfer( cRowsToTransfer ), _fBwdFetch( !fFwdFetch ), _cbRowWidth( (unsigned) cbRowWidth ), _cbSeek( cbSeek ), _cbReserved( cbReserved ), _cbReadBuffer( 0 ), _ulClientBase( 0 ) {}
void SetClientBase( ULONG_PTR ul ) { // On Win64 this will store the lower part into _ulClientBase
_ulClientBase = (ULONG) ul;
#ifdef _WIN64
// Store the upper part into the reserved area.
SetReserved2 ((ULONG) (ul >> 32) ); #endif
}
ULONG GetCursor() { return _hCursor; } unsigned GetRowsToTransfer() { return _cRowsToTransfer; } size_t GetRowWidth() { return _cbRowWidth; } unsigned GetSeekSize() { return _cbSeek; } unsigned GetReservedSize() { return _cbReserved; } unsigned GetReadBufferSize() { return _cbReadBuffer; } void SetReadBufferSize( unsigned cb ) { _cbReadBuffer = cb; } ULONG_PTR GetClientBase() { #ifdef _WIN64
return ( ( (ULONG_PTR) _ulClientBase ) | ( ( (ULONG_PTR) GetReserved2() ) << 32 ) ); #else
return _ulClientBase; #endif
} BOOL GetFwdFetch() { return !_fBwdFetch; }
BYTE * GetDesc() { return (BYTE *) ( this + 1 ); }
private: ULONG _hCursor; unsigned _cRowsToTransfer; unsigned _cbRowWidth; // was size_t but breaks 64-bit, residual parameters above
unsigned _cbSeek; unsigned _cbReserved; unsigned _cbReadBuffer;
ULONG _ulClientBase; // On Win64 this value is broken into
// 2 ULONGS and top half is stored in the
// reserved area.
ULONG _fBwdFetch; // fBwdFetch is used instead of fFwdFetch
// because the value of this field is 0
// for old clients and we want the default
// to be forward fetch, which is what a 0 value
// of fBwdFetch implies.
// don't add data here -- marshalled version of rowseek follows data
};
//+-------------------------------------------------------------------------
//
// Class: CPMGetRowsOut
//
// Synopsis: Message reply containing rows retrieved
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetRowsOut : public CProxyMessage { public: CPMGetRowsOut() : CProxyMessage( pmGetRows ) {} unsigned & RowsReturned() { return _cRowsReturned; } BYTE * GetSeekDesc() { return (BYTE *) ( this + 1 ); }
private: unsigned _cRowsReturned; };
//+-------------------------------------------------------------------------
//
// Class: CPMRestartPositionIn
//
// Synopsis: Message for setting fetch position at start for chapter
//
// History: 17-Apr-97 emilyb created
//
//--------------------------------------------------------------------------
class CPMRestartPositionIn : public CProxyMessage { public: CPMRestartPositionIn( ULONG hCursor, CI_TBL_CHAPT chapt ) : CProxyMessage( pmRestartPosition ), _hCursor( hCursor ), _chapt( chapt ) {}
CI_TBL_CHAPT GetChapter() { return _chapt; } ULONG GetCursor() { return _hCursor; }
private: ULONG _hCursor; CI_TBL_CHAPT _chapt;
};
//+-------------------------------------------------------------------------
//
// Class: CPMStopAsynchIn
//
// Synopsis: Message for stopping processing async rowset
//
// History: 17-Apr-97 emilyb created
//
//--------------------------------------------------------------------------
class CPMStopAsynchIn : public CProxyMessage { public: CPMStopAsynchIn( ULONG hCursor ) : CProxyMessage( pmStopAsynch ), _hCursor( hCursor ) {}
ULONG GetCursor() { return _hCursor; }
private: ULONG _hCursor; };
//+-------------------------------------------------------------------------
//
// Class: CPMStartWatchingIn
//
// Synopsis: Message for starting watch all behavior
//
// History: 17-Apr-97 emilyb created
//
//--------------------------------------------------------------------------
class CPMStartWatchingIn : public CProxyMessage { public: CPMStartWatchingIn( ULONG hCursor ) : CProxyMessage( pmStartWatching ), _hCursor( hCursor ) {}
ULONG GetCursor() { return _hCursor; }
private: ULONG _hCursor; };
//+-------------------------------------------------------------------------
//
// Class: CPMStopWatchingIn
//
// Synopsis: Message for stopping watch all behavior
//
// History: 17-Apr-97 emilyb created
//
//--------------------------------------------------------------------------
class CPMStopWatchingIn : public CProxyMessage { public: CPMStopWatchingIn( ULONG hCursor ) : CProxyMessage( pmStopWatching ), _hCursor( hCursor ) {}
ULONG GetCursor() { return _hCursor; }
private: ULONG _hCursor; };
//+-------------------------------------------------------------------------
//
// Class: CPMRatioFinishedIn
//
// Synopsis: Message for getting ratio finished
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMRatioFinishedIn : public CProxyMessage { public: CPMRatioFinishedIn( ULONG hCursor, BOOL fQuick ) : CProxyMessage( pmRatioFinished ), _hCursor( hCursor ), _fQuick( fQuick ) {} ULONG GetCursor() { return _hCursor; } ULONG GetQuick() { return _fQuick; }
private: ULONG _hCursor; BOOL _fQuick; };
//+-------------------------------------------------------------------------
//
// Class: CPMRatioFinishedOut
//
// Synopsis: Message reply for ratio finished
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMRatioFinishedOut : public CProxyMessage { public: ULONG & Numerator() { return _ulNumerator; } ULONG & Denominator() { return _ulDenominator; } ULONG & RowCount() { return _cRows; } BOOL & NewRows() { return _fNewRows; }
private: ULONG _ulNumerator; ULONG _ulDenominator; ULONG _cRows; BOOL _fNewRows; };
//+-------------------------------------------------------------------------
//
// Class: CPMCompareBmkIn
//
// Synopsis: Message to compare bookmarks
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMCompareBmkIn : public CProxyMessage { public: CPMCompareBmkIn( ULONG hCursor, CI_TBL_CHAPT chapt, CI_TBL_BMK bmkFirst, CI_TBL_BMK bmkSecond ) : CProxyMessage( pmCompareBmk ), _hCursor( hCursor ), _chapt( chapt ), _bmkFirst( bmkFirst ), _bmkSecond( bmkSecond ) {}
ULONG GetCursor() { return _hCursor; } CI_TBL_CHAPT GetChapter() { return _chapt; } CI_TBL_BMK GetBmkFirst() { return _bmkFirst; } CI_TBL_BMK GetBmkSecond() { return _bmkSecond; }
private: ULONG _hCursor; CI_TBL_CHAPT _chapt; CI_TBL_BMK _bmkFirst; CI_TBL_BMK _bmkSecond; };
//+-------------------------------------------------------------------------
//
// Class: CPMCompareBmkOut
//
// Synopsis: Message reply for compare bookmarks
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMCompareBmkOut : public CProxyMessage { public: DWORD & Comparison() { return _dwComparison; }
private: DWORD _dwComparison; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetApproximatePositionIn
//
// Synopsis: Message request for getting approximate position
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetApproximatePositionIn : public CProxyMessage { public: CPMGetApproximatePositionIn( ULONG hCursor, CI_TBL_CHAPT chapt, CI_TBL_BMK bmk ) : CProxyMessage( pmGetApproximatePosition ), _hCursor( hCursor ), _chapt( chapt ), _bmk( bmk ) {}
ULONG GetCursor() { return _hCursor; } CI_TBL_CHAPT GetChapter() { return _chapt; } CI_TBL_BMK GetBmk() { return _bmk; }
private: ULONG _hCursor; CI_TBL_CHAPT _chapt; CI_TBL_BMK _bmk; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetApproximatePositionOut
//
// Synopsis: Message reply for getting approximate position
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetApproximatePositionOut : public CProxyMessage { public: ULONG & Numerator() { return _numerator; } ULONG & Denominator() { return _denominator; }
private: ULONG _numerator; ULONG _denominator; };
//+-------------------------------------------------------------------------
//
// Class: CPMSetBindingsIn
//
// Synopsis: Message request to set bindings
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMSetBindingsIn : public CProxyMessage { public: CPMSetBindingsIn( ULONG hCursor, ULONG cbRow, ULONG cbBindingDesc ) : CProxyMessage( pmSetBindings ), _hCursor( hCursor ), _cbRow( cbRow ), _cbBindingDesc( cbBindingDesc ) {}
ULONG GetCursor() { return _hCursor; } ULONG GetRowLength() { return _cbRow; } ULONG GetBindingDescLength() { return _cbBindingDesc; } BYTE * GetDescription() { return (BYTE *) ( this + 1 ); }
private: ULONG _hCursor; ULONG _cbRow; ULONG _cbBindingDesc; ULONG _dummy; // force 8-byte alignment of description
// don't add data here -- marshalled version of bindings follows data
};
//+-------------------------------------------------------------------------
//
// Class: CPMSendNotifyOut
//
// Synopsis: Message reply for notifications
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMSendNotifyOut : public CProxyMessage { public: CPMSendNotifyOut( DBWATCHNOTIFY wn ) : CProxyMessage( pmSendNotify ), _watchNotify( wn ) {}
DBWATCHNOTIFY & WatchNotify() { return _watchNotify; }
private: DBWATCHNOTIFY _watchNotify; };
//+-------------------------------------------------------------------------
//
// Class: CPMSetWatchModeIn
//
// Synopsis: Message to set watch mode
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMSetWatchModeIn : public CProxyMessage { public: CPMSetWatchModeIn( HWATCHREGION hRegion, ULONG mode ) : CProxyMessage( pmSetWatchMode ), _hRegion( hRegion ), _mode( mode ) {}
HWATCHREGION GetRegion() { return _hRegion; } ULONG GetMode() { return _mode; }
private: HWATCHREGION _hRegion; ULONG _mode; };
//+-------------------------------------------------------------------------
//
// Class: CPMSetWatchModeOut
//
// Synopsis: Message reply for setting watch mode
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMSetWatchModeOut : public CProxyMessage { public: HWATCHREGION & Region() { return _hRegion; }
private: HWATCHREGION _hRegion; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetWatchInfoIn
//
// Synopsis: Message for getting watch info
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetWatchInfoIn : public CProxyMessage { public: CPMGetWatchInfoIn( HWATCHREGION hRegion ) : CProxyMessage( pmGetWatchInfo ), _hRegion( hRegion ) {}
HWATCHREGION GetRegion() { return _hRegion; }
private: HWATCHREGION _hRegion; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetWatchInfoOut
//
// Synopsis: Message reply for getting watch info
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetWatchInfoOut : public CProxyMessage { public: ULONG & Mode() { return _mode; } CI_TBL_CHAPT & Chapter() { return _chapt; } CI_TBL_BMK & Bookmark() { return _bmk; } ULONG & RowCount() { return _cRows; }
private: ULONG _mode; CI_TBL_CHAPT _chapt; CI_TBL_BMK _bmk; ULONG _cRows; };
//+-------------------------------------------------------------------------
//
// Class: CPMShrinkWatchRegionIn
//
// Synopsis: Message for shrinking watch region
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMShrinkWatchRegionIn : public CProxyMessage { public: CPMShrinkWatchRegionIn( HWATCHREGION hRegion, CI_TBL_CHAPT chapter, CI_TBL_BMK bookmark, ULONG cRows ) : CProxyMessage( pmShrinkWatchRegion ), _hRegion( hRegion ), _chapter( chapter ), _bookmark( bookmark ), _cRows( cRows ) {}
HWATCHREGION GetRegion() { return _hRegion; } CI_TBL_CHAPT GetChapter() { return _chapter; } CI_TBL_BMK GetBookmark() { return _bookmark; } LONG GetRowCount() { return _cRows; }
private: HWATCHREGION _hRegion; CI_TBL_CHAPT _chapter; CI_TBL_BMK _bookmark; LONG _cRows; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetQueryStatusIn
//
// Synopsis: Message for getting query status
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetQueryStatusIn : public CProxyMessage { public: CPMGetQueryStatusIn( ULONG hCursor ) : CProxyMessage( pmGetQueryStatus ), _hCursor( hCursor ) {}
ULONG GetCursor() { return _hCursor; }
private: ULONG _hCursor; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetQueryStatusOut
//
// Synopsis: Message reply for getting query status
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetQueryStatusOut : public CProxyMessage { public: DWORD & QueryStatus() { return _status; }
private: DWORD _status; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetQueryStatusExIn
//
// Synopsis: Message for getting query status Ex
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetQueryStatusExIn : public CProxyMessage { public: CPMGetQueryStatusExIn( ULONG hCursor, ULONG bmk ) : CProxyMessage( pmGetQueryStatusEx ), _hCursor( hCursor ), _bmk( bmk ) {}
ULONG GetCursor() { return _hCursor; } ULONG GetBookmark() { return _bmk; }
private: ULONG _hCursor; ULONG _bmk; };
//+-------------------------------------------------------------------------
//
// Class: CPMGetQueryStatusExOut
//
// Synopsis: Message reply for getting query status
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMGetQueryStatusExOut : public CProxyMessage { public: DWORD & QueryStatus() { return _status; } DWORD & FilteredDocuments() { return _cFilteredDocuments; } DWORD & DocumentsToFilter() { return _cDocumentsToFilter; } ULONG & RatioFinishedDenominator() { return _dwRatioFinishedDenominator; } ULONG & RatioFinishedNumerator() { return _dwRatioFinishedNumerator; } ULONG & RowBmk() { return _iRowBmk; } ULONG & RowsTotal() { return _cRowsTotal; }
private: DWORD _status; DWORD _cFilteredDocuments; DWORD _cDocumentsToFilter; ULONG _dwRatioFinishedDenominator; ULONG _dwRatioFinishedNumerator; ULONG _iRowBmk; ULONG _cRowsTotal; };
//+-------------------------------------------------------------------------
//
// Class: CPMCiStateInOut
//
// Synopsis: Message request/reply for ci state
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMCiStateInOut : public CProxyMessage { public: CPMCiStateInOut( DWORD cbStruct ) : CProxyMessage( pmCiState ) { RtlZeroMemory( &_state, sizeof _state ); if (cbStruct <= sizeof _state) _state.cbStruct = cbStruct; else _state.cbStruct = sizeof _state; }
CPMCiStateInOut() { // Setting this to 0 here, cause we have added a new
// member to CI_STATE, which older servers don't have
RtlZeroMemory( &_state, sizeof _state ); _state.cbStruct = sizeof _state; }
CI_STATE & GetState() { return _state; }
private: CI_STATE _state; };
//+-------------------------------------------------------------------------
//
// Class: CPMForceMergeIn
//
// Synopsis: Message to force a merge
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMForceMergeIn : public CProxyMessage { public: CPMForceMergeIn( PARTITIONID partID ) : CProxyMessage( pmForceMerge ), _partID( partID ) {}
PARTITIONID GetPartID() { return _partID; }
private: PARTITIONID _partID; };
//+-------------------------------------------------------------------------
//
// Class: CPMAbortMergeIn
//
// Synopsis: Message to abort a merge
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMAbortMergeIn : public CProxyMessage { public: CPMAbortMergeIn( PARTITIONID partID ) : CProxyMessage( pmForceMerge ), _partID( partID ) {}
PARTITIONID GetPartID() { return _partID; }
private: PARTITIONID _partID; };
//+-------------------------------------------------------------------------
//
// Class: CPMBeginCacheTransactionOut
//
// Synopsis: Message reply to begin a cache transaction
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMBeginCacheTransactionOut : public CProxyMessage { public: ULONG_PTR & GetToken() { return _token; }
private: ULONG_PTR _token; };
//+-------------------------------------------------------------------------
//
// Class: CPMSetupCacheIn
//
// Synopsis: Message to setup the property cache
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMSetupCacheIn : public CProxyMessage { public: CPMSetupCacheIn( ULONG cbPS, ULONG_PTR ulToken, ULONG vt, ULONG cbMaxLen, BOOL fCanBeModified, DWORD dwStoreLevel ) : CProxyMessage( pmSetupCache ), _ulToken( ulToken ), _vt( vt ), _cbMaxLen( cbMaxLen ), _cbPS( cbPS ) { // primary and secondary are 0 and 1
// can't include fsciexps.hxx here
Win4Assert( dwStoreLevel <= 0xffff ); USHORT usf = ( 0 != fCanBeModified ); USHORT usl = (USHORT) dwStoreLevel; SetReserved2( MAKELONG( usf, usl ) ); }
ULONG_PTR GetToken() { return _ulToken; } ULONG GetVT() { return _vt; } ULONG GetMaxLen() { return _cbMaxLen; } ULONG GetPSSize() { return _cbPS; } BOOL IsModifiable() { return (BOOL) LOWORD( GetReserved2() ); } DWORD GetStoreLevel() { return (DWORD) HIWORD( GetReserved2() ); } BYTE * GetPS() { return (BYTE *) (this + 1); }
private: ULONG_PTR _ulToken; ULONG _vt; ULONG _cbMaxLen; ULONG _cbPS;
// don't add data here -- marshalled version of propspec follows data
};
//+-------------------------------------------------------------------------
//
// Class: CPMEndCacheTransactionIn
//
// Synopsis: Message request to end a cache transaction
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMEndCacheTransactionIn : public CProxyMessage { public: CPMEndCacheTransactionIn( ULONG_PTR ulToken, BOOL fCommit ) : CProxyMessage( pmEndCacheTransaction ), _ulToken( ulToken ), _fCommit( fCommit ) {}
ULONG_PTR GetToken() { return _ulToken; } BOOL GetCommit() { return _fCommit; }
private: ULONG_PTR _ulToken; BOOL _fCommit; };
//+-------------------------------------------------------------------------
//
// Class: CPMAddScopeIn
//
// Synopsis: Message to add a scope for filtering
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMAddScopeIn : public CProxyMessage { public: CPMAddScopeIn( WCHAR const * pRoot ) : CProxyMessage( pmAddScope ) { wcscpy( GetRoot(), pRoot ); }
static unsigned SizeOf( WCHAR const *pwc ) { return sizeof CPMAddScopeIn + ( ( wcslen( pwc ) + 1 ) * sizeof WCHAR ); }
WCHAR * GetRoot() { return (WCHAR *) (this + 1); } };
//+-------------------------------------------------------------------------
//
// Class: CPMRemoveScopeIn
//
// Synopsis: Message to remove a scope from filtering
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMRemoveScopeIn : public CProxyMessage { public: CPMRemoveScopeIn( WCHAR const * pRoot ) : CProxyMessage( pmRemoveScope ) { wcscpy( GetRoot(), pRoot ); }
static unsigned SizeOf( WCHAR const *pwc ) { return sizeof CPMRemoveScopeIn + ( ( wcslen( pwc ) + 1 ) * sizeof WCHAR ); }
WCHAR * GetRoot() { return (WCHAR *) (this + 1); } };
//+-------------------------------------------------------------------------
//
// Class: CPMFetchValueIn
//
// Synopsis: Message fetch all or part of a property value
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMFetchValueIn : public CProxyMessage { public: CPMFetchValueIn( WORKID wid, DWORD cbSoFar, DWORD cbPropSpec, DWORD cbChunk ) : CProxyMessage( pmFetchValue ), _wid( wid ), _cbSoFar( cbSoFar ), _cbPropSpec( cbPropSpec ), _cbChunk( cbChunk ) {}
WORKID GetWID() { return _wid; } DWORD GetSoFar() { return _cbSoFar; } DWORD GetPSSize() { return _cbPropSpec; } DWORD GetChunkSize() { return _cbChunk; } BYTE * GetPS() { return (BYTE *) (this + 1); }
private: WORKID _wid; // WORKID if file with property value
DWORD _cbSoFar; // # of bytes transferred so far
DWORD _cbPropSpec; // # of bytes taken by propspec
DWORD _cbChunk; // # of bytes max that can be written
// don't add data here -- marshalled version of propspec follows data
};
//+-------------------------------------------------------------------------
//
// Class: CPMFetchValueOut
//
// Synopsis: Message reply containing all or part of a property value
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMFetchValueOut : public CProxyMessage { public: CPMFetchValueOut() : CProxyMessage( pmFetchValue ) {}
DWORD & ValueSize() { return _cbValue; } BOOL & ValueExists() { return _fValueExists; } BOOL & MoreExists() { return _fMoreExists; } void * Value() { return (void *) (this+1); }
private: DWORD _cbValue; // # of bytes transferred in this chunk
BOOL _fMoreExists; // TRUE if more chunks exist
BOOL _fValueExists; // TRUE if there was a value, FALSE otherwise
// don't add data here -- marshalled version of property val follows data
};
//+-------------------------------------------------------------------------
//
// Class: CPMWorkIdToPathIn
//
// Synopsis: Message to translate a workid to a path
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMWorkIdToPathIn : public CProxyMessage { public: CPMWorkIdToPathIn( WORKID wid ) : CProxyMessage( pmWorkIdToPath ), _wid( wid ) {} WORKID GetWorkId() { return _wid; }
private: WORKID _wid; };
//+-------------------------------------------------------------------------
//
// Class: CPMWorkIdToPathOut
//
// Synopsis: Message reply containing a path for a workid
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMWorkIdToPathOut : public CProxyMessage { public: WCHAR * Path() { return (WCHAR *) (this + 1); } BOOL & Any() { return _fAny; }
private: BOOL _fAny;
// don't add data here -- marshalled version of path follows data
};
//+-------------------------------------------------------------------------
//
// Class: CPMUpdateDocumentsIn
//
// Synopsis: Message to force scans
//
// History: 16-Sep-96 dlee Created.
//
//--------------------------------------------------------------------------
class CPMUpdateDocumentsIn : public CProxyMessage { public: CPMUpdateDocumentsIn( WCHAR const * pwcRootPath, ULONG flag ) : CProxyMessage( pmUpdateDocuments ), _flag( flag ), _fRootPath( 0 != pwcRootPath ) { if ( _fRootPath ) wcscpy( GetRootPath(), pwcRootPath ); }
static unsigned SizeOf( WCHAR const * pwcRootPath ) { unsigned cb = sizeof CPMUpdateDocumentsIn; if ( 0 != pwcRootPath ) cb += sizeof WCHAR * ( 1 + wcslen( pwcRootPath ) ); return cb; }
ULONG GetFlag() { return _flag; } WCHAR *GetRootPath() { return _fRootPath ? (WCHAR *) (this + 1) : 0; }
private: ULONG _flag; BOOL _fRootPath;
// don't add data here -- marshalled version of path follows data
};
//+-------------------------------------------------------------------------
//
// Class: CPMSetCatStateIn
//
// Synopsis: Message to Set the catalog in a specified state
//
// History: 08-Apr-98 kitmanh Created.
//
//--------------------------------------------------------------------------
class CPMSetCatStateIn : public CProxyMessage { public: CPMSetCatStateIn( PARTITIONID partID, WCHAR const * pwcsCatalog, DWORD dwNewState ) : CProxyMessage( pmSetCatState ), _partID( partID ), _dwNewState( dwNewState ) { if ( 0 != pwcsCatalog ) wcscpy( GetCatName(), pwcsCatalog ); }
static unsigned SizeOf( WCHAR const * pwcsCatalog ) { unsigned cb = sizeof CPMSetCatStateIn; if ( 0 != pwcsCatalog ) cb += sizeof WCHAR * ( 1 + wcslen( pwcsCatalog ) ); return cb; }
PARTITIONID GetPartID() { return _partID; } DWORD GetNewState() { return _dwNewState; } WCHAR * GetCatName() { return (WCHAR *) (this + 1); }
private: PARTITIONID _partID; DWORD _dwNewState;
};
//+-------------------------------------------------------------------------
//
// Class: CPMSetCatStateOut
//
// Synopsis: Message reply for SetCatState
//
// History: 08-Apr-98 kitmanh Created.
//
//--------------------------------------------------------------------------
class CPMSetCatStateOut : public CProxyMessage { public: DWORD & GetOldState() { return _dwOldState; }
private: DWORD _dwOldState; };
|