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.

1527 lines
41 KiB

  1. //+-------------------------------------------------------------------------
  2. //
  3. // Microsoft Windows
  4. // Copyright (C) Microsoft Corporation, 1996 - 2000.
  5. //
  6. // File: proxymsg.hxx
  7. //
  8. // Contents: Defines messages and related constants for communication over
  9. // a named pipe between query clients and servers.
  10. //
  11. // Classes: CProxyMessage
  12. // CPM*
  13. //
  14. // History: 16-Sep-96 dlee Created.
  15. // 24-Aug-99 klam CI Win64 version info
  16. //
  17. //--------------------------------------------------------------------------
  18. #pragma once
  19. #define CI_PIPE_NAME L"ci_skads"
  20. #define CI_SERVER_PIPE_NAME L"\\\\.\\pipe\\ci_skads"
  21. #define IsCi64(x) ((x) & 0x10000)
  22. #define pmCiVersion(x) ((x) & ~0x10000)
  23. #ifdef _WIN64
  24. // Low bit on upper word indicates 64 bit machine
  25. const int pmClientVersion = 0x10008;
  26. const int pmServerVersion = 0x10007;
  27. #else
  28. const int pmClientVersion = 8;
  29. const int pmServerVersion = 7;
  30. #endif
  31. // This alignment function is useful for asserts
  32. inline BOOL isQWordAligned( void const * p )
  33. { return 0 == ( ( (ULONG_PTR) p ) & 0x7 ); }
  34. inline BOOL isDWordAligned( ULONG ul )
  35. { return 0 == ( ul & 0x3 ); }
  36. // note: pipe writes are limited to 64k in Win32. Also, these buffers are
  37. // allocated from non-paged-pool on the server.
  38. const ULONG cbMaxProxyBuffer = 0x4000; //16384
  39. const int pmConnect = 200; // 0xc8
  40. const int pmDisconnect = 201; // 0xc9
  41. const int pmCreateQuery = 202; // 0xca
  42. const int pmFreeCursor = 203; // 0xcb
  43. const int pmGetRows = 204; // 0xcc
  44. const int pmRatioFinished = 205; // 0xcd
  45. const int pmCompareBmk = 206; // 0xce
  46. const int pmGetApproximatePosition = 207; // 0xcf
  47. const int pmSetBindings = 208; // 0xd0
  48. const int pmGetNotify = 209; // 0xd1
  49. const int pmSendNotify = 210; // 0xd2
  50. const int pmSetWatchMode = 211; // 0xd3
  51. const int pmGetWatchInfo = 212; // 0xd4
  52. const int pmShrinkWatchRegion = 213; // 0xd5
  53. const int pmRefresh = 214; // 0xd6
  54. const int pmGetQueryStatus = 215; // 0xd7
  55. const int pmWidToPath = 216; // 0xd8
  56. const int pmCiState = 217; // 0xd9
  57. const int pmBeginCacheTransaction = 218; // 0xda
  58. const int pmSetupCache = 219; // 0xdb
  59. const int pmEndCacheTransaction = 220; // 0xdc
  60. const int pmAddScope = 221; // 0xdd
  61. const int pmRemoveScope = 222; // 0xde
  62. const int pmAddVirtualScope = 223; // 0xdf
  63. const int pmRemoveVirtualScope = 224; // 0xe0
  64. const int pmForceMerge = 225; // 0xe1
  65. const int pmAbortMerge = 226; // 0xe2
  66. const int pmSetPartition = 227; // 0xe3
  67. const int pmFetchValue = 228; // 0xe4
  68. const int pmWorkIdToPath = 229; // 0xe5
  69. const int pmUpdateDocuments = 230; // 0xe6
  70. const int pmGetQueryStatusEx = 231; // 0xe7
  71. const int pmRestartPosition = 232; // 0xe8
  72. const int pmStopAsynch = 233; // 0xe9
  73. const int pmStartWatching = 234; // 0xea
  74. const int pmStopWatching = 235; // 0xeb
  75. const int pmSetCatState = 236; // 0xec
  76. const int cProxyMessages = 37;
  77. //+-------------------------------------------------------------------------
  78. //
  79. // Class: CProxyMessage
  80. //
  81. // Synopsis: All proxy messages derive from this message
  82. //
  83. // History: 16-Sep-96 dlee Created.
  84. //
  85. //--------------------------------------------------------------------------
  86. class CProxyMessage
  87. {
  88. public:
  89. void * operator new( size_t size, void *pv ) { return pv; }
  90. #if _MSC_VER >= 1200
  91. void operator delete( void * pv, void * ppv ) {}
  92. #else
  93. void operator delete( void * pv ) {}
  94. #endif
  95. CProxyMessage( int msg ) :
  96. _msg( msg ),
  97. _status( S_OK ),
  98. _ulReserved1( 0 ),
  99. _ulReserved2( 0 ) {}
  100. CProxyMessage() {}
  101. int GetMessage() { return _msg; }
  102. void SetMessage( int msg ) { _msg = msg; }
  103. void SetStatus( HRESULT hr ) { _status = hr; }
  104. HRESULT GetStatus() { return _status; }
  105. BYTE * Data() { return (BYTE *) ( this + 1 ); }
  106. static ULONG ProxyCheckSum( BYTE const * pb, ULONG cb )
  107. {
  108. Win4Assert( isQWordAligned( pb ) );
  109. Win4Assert( isDWordAligned( cb ) );
  110. ULONG x = 0;
  111. ULONG * pul = (ULONG *) pb;
  112. ULONG cul = cb / sizeof ULONG;
  113. for ( ULONG i = 0; i < cul; i++ )
  114. x += pul[i];
  115. return x ^ 0x59533959; // mask that we're using simple checksum
  116. }
  117. void SetCheckSum( ULONG cb )
  118. {
  119. _ulCheckSum = ComputeCheckSum( cb );
  120. }
  121. void ValidateCheckSum( int iClientVersion, ULONG cb )
  122. {
  123. // if it's a recent client or they passed a checksum, validate it
  124. if ( iClientVersion >= 8 || 0 != _ulCheckSum )
  125. {
  126. if ( ComputeCheckSum( cb ) != _ulCheckSum )
  127. THROW( CException( STATUS_INVALID_PARAMETER ) );
  128. }
  129. }
  130. protected:
  131. ULONG GetReserved1() { return _ulReserved1; }
  132. void SetReserved1( ULONG ul ) { _ulReserved1 = ul; }
  133. ULONG GetReserved2() { return _ulReserved2; }
  134. void SetReserved2( ULONG ul ) { _ulReserved2 = ul; }
  135. //
  136. // We know that there are 2 reserved fields that together are guaranteed
  137. // to hold a full ULONG_PTR even on Win64 systems. Users of reserved
  138. // space have to know what they are doing.
  139. //
  140. ULONG_PTR * GetReservedSpace() { return (ULONG_PTR *) &_ulReserved1; }
  141. private:
  142. // make sure the standard operator new isn't called
  143. void * operator new ( size_t size )
  144. { Win4Assert( !"don't call me!" ); return 0; }
  145. ULONG ComputeCheckSum( ULONG cb )
  146. {
  147. // Don't include the base class in the checksum, only the _msg,
  148. // since _ulCheckSum will change when we set it
  149. Win4Assert( cb >= sizeof CProxyMessage );
  150. cb -= sizeof CProxyMessage;
  151. return ProxyCheckSum( Data(), cb ) - _msg;
  152. }
  153. int _msg; // one of the pm* constants.
  154. HRESULT _status; // sent from server to client, client sets to 0
  155. union
  156. {
  157. // Some messages use this as the checksum for client to server, but
  158. // it's still available for server to client
  159. ULONG _ulReserved1; // guaranteed to be 0 from v1-v2 client
  160. ULONG _ulCheckSum; // set for >= v8 clients
  161. };
  162. ULONG _ulReserved2; // guaranteed to be 0 from v1-v2 client
  163. // for Win64 this holds the upper half of a pointer
  164. };
  165. //+-------------------------------------------------------------------------
  166. //
  167. // Class: CPMConnectIn
  168. //
  169. // Synopsis: Establishes a connection between the client and the server.
  170. //
  171. // History: 16-Sep-96 dlee Created.
  172. //
  173. //--------------------------------------------------------------------------
  174. class CPMConnectIn : public CProxyMessage
  175. {
  176. public:
  177. static ULONG_PTR Align8Byte( ULONG_PTR cb )
  178. {
  179. return (cb + 0x7) & (~0x7);
  180. }
  181. static unsigned SizeOf( WCHAR const * pwcClientMachineName,
  182. WCHAR const * pwcClientUserName,
  183. ULONG cbBlob = 0,
  184. ULONG cbBlob2 = 0 )
  185. {
  186. unsigned cb = sizeof CPMConnectIn;
  187. cb += sizeof WCHAR * ( 1 + wcslen( pwcClientMachineName ) );
  188. cb += sizeof WCHAR * ( 1 + wcslen( pwcClientUserName ) );
  189. //
  190. // Align 8 for the blobs
  191. //
  192. if ( 0 != cbBlob )
  193. {
  194. cb = (unsigned)Align8Byte(cb);
  195. cb += (unsigned)Align8Byte(cbBlob);
  196. }
  197. if ( 0 != cbBlob2 )
  198. {
  199. cb = (unsigned)Align8Byte(cb);
  200. cb += (unsigned)Align8Byte(cbBlob2);
  201. }
  202. return cb;
  203. }
  204. CPMConnectIn( WCHAR const * pwcClientMachineName,
  205. WCHAR const * pwcClientUserName,
  206. BOOL fClientIsRemote,
  207. ULONG cbBlob,
  208. ULONG cbBlob2,
  209. int iClientVersion = pmClientVersion ) :
  210. CProxyMessage( pmConnect ),
  211. _fClientIsRemote( fClientIsRemote ),
  212. _iClientVersion( iClientVersion ),
  213. _cbBlob( cbBlob ),
  214. _cbBlob2( cbBlob2 )
  215. {
  216. wcscpy( GetClientMachineName(), pwcClientMachineName );
  217. wcscpy( GetClientUserName(), pwcClientUserName );
  218. }
  219. BYTE * GetBlobStartAddr() const
  220. {
  221. BYTE * pbAddr = 0;
  222. if ( 0 != _cbBlob )
  223. {
  224. WCHAR * pwcsClientUserName = GetClientUserName();
  225. pbAddr = (BYTE *) (pwcsClientUserName + wcslen(pwcsClientUserName)+1);
  226. pbAddr = (BYTE *) Align8Byte( (ULONG_PTR) pbAddr );
  227. }
  228. return pbAddr;
  229. }
  230. BYTE * GetBlob2StartAddr() const
  231. {
  232. return GetBlobStartAddr() + Align8Byte(GetBlobSize());
  233. }
  234. ULONG GetBlobSize() const { return _cbBlob; }
  235. ULONG GetBlob2Size() const { return _cbBlob2; }
  236. BOOL IsClientRemote() { return _fClientIsRemote; }
  237. WCHAR * GetClientMachineName() const
  238. {
  239. return (WCHAR *) ( this + 1 );
  240. }
  241. WCHAR * GetClientUserName() const
  242. {
  243. WCHAR *pwcMach = GetClientMachineName();
  244. return pwcMach + 1 + wcslen( pwcMach );
  245. }
  246. int GetClientVersion() { return _iClientVersion; }
  247. private:
  248. int _iClientVersion;
  249. BOOL _fClientIsRemote;
  250. ULONG _cbBlob;
  251. union
  252. {
  253. // version 5 clients have a blob1, but no blob2. version
  254. // 6 clients have both a blob1 and a blob2 directly after
  255. // blob1.
  256. // The rest of the reserved area is still unused.
  257. LONGLONG _reserved[2];
  258. struct
  259. {
  260. ULONG _cbBlob2;
  261. };
  262. };
  263. };
  264. //+-------------------------------------------------------------------------
  265. //
  266. // Class: CPMConnectOut
  267. //
  268. // Synopsis: A reply from the server to a connect message
  269. //
  270. // History: 16-Sep-96 dlee Created.
  271. //
  272. //--------------------------------------------------------------------------
  273. class CPMConnectOut : public CProxyMessage
  274. {
  275. public:
  276. int & ServerVersion() { return _ServerVersion; }
  277. private:
  278. int _ServerVersion;
  279. LONGLONG _reserved[2];
  280. };
  281. //+-------------------------------------------------------------------------
  282. //
  283. // Class: CPMCreateQueryIn
  284. //
  285. // Synopsis: Message reply for a create query, returns an array of cursors
  286. //
  287. // History: 16-Sep-96 dlee Created.
  288. //
  289. //--------------------------------------------------------------------------
  290. class CPMCreateQueryIn : public CProxyMessage
  291. {
  292. public:
  293. CPMCreateQueryIn() : CProxyMessage( pmCreateQuery ) {}
  294. };
  295. //+-------------------------------------------------------------------------
  296. //
  297. // Class: CPMCreateQueryOut
  298. //
  299. // Synopsis: Message reply for a create query, returns an array of cursors
  300. //
  301. // History: 16-Sep-96 dlee Created.
  302. //
  303. //--------------------------------------------------------------------------
  304. class CPMCreateQueryOut : public CProxyMessage
  305. {
  306. public:
  307. ULONG * GetCursors() { return (ULONG *) ( this + 1 ); }
  308. BOOL & IsTrueSequential() { return _fTrueSequential; }
  309. BOOL & IsWorkIdUnique() { return _fWorkIdUnique; }
  310. ULONG_PTR GetServerCookie() { return *GetReservedSpace(); }
  311. void SetServerCookie( ULONG_PTR ul ) { *GetReservedSpace() = ul; }
  312. private:
  313. BOOL _fTrueSequential;
  314. BOOL _fWorkIdUnique;
  315. };
  316. //+-------------------------------------------------------------------------
  317. //
  318. // Class: CPMFreeCursorIn
  319. //
  320. // Synopsis: Message to free a cursor
  321. //
  322. // History: 16-Sep-96 dlee Created.
  323. //
  324. //--------------------------------------------------------------------------
  325. class CPMFreeCursorIn : public CProxyMessage
  326. {
  327. public:
  328. CPMFreeCursorIn( ULONG hCursor ) :
  329. CProxyMessage( pmFreeCursor ), _hCursor( hCursor ) {}
  330. ULONG GetCursor() { return _hCursor; }
  331. private:
  332. ULONG _hCursor;
  333. };
  334. //+-------------------------------------------------------------------------
  335. //
  336. // Class: CPMFreeCursorOut
  337. //
  338. // Synopsis: Message reply to freeing a cursor, returns # of cursors left
  339. //
  340. // History: 16-Sep-96 dlee Created.
  341. //
  342. //--------------------------------------------------------------------------
  343. class CPMFreeCursorOut : public CProxyMessage
  344. {
  345. public:
  346. unsigned & CursorsRemaining() { return _cCursorsRemaining; }
  347. private:
  348. unsigned _cCursorsRemaining;
  349. };
  350. //+-------------------------------------------------------------------------
  351. //
  352. // Class: CPMGetRowsIn
  353. //
  354. // Synopsis: Message for getting rows
  355. //
  356. // History: 16-Sep-96 dlee Created.
  357. // 30-Aug-99 KLam 64 bit changes
  358. //
  359. //--------------------------------------------------------------------------
  360. class CPMGetRowsIn : public CProxyMessage
  361. {
  362. public:
  363. CPMGetRowsIn( ULONG hCursor,
  364. unsigned cRowsToTransfer,
  365. ULONG fFwdFetch,
  366. size_t cbRowWidth,
  367. unsigned cbSeek,
  368. unsigned cbReserved ) :
  369. CProxyMessage( pmGetRows ),
  370. _hCursor( hCursor ),
  371. _cRowsToTransfer( cRowsToTransfer ),
  372. _fBwdFetch( !fFwdFetch ),
  373. _cbRowWidth( (unsigned) cbRowWidth ),
  374. _cbSeek( cbSeek ),
  375. _cbReserved( cbReserved ),
  376. _cbReadBuffer( 0 ),
  377. _ulClientBase( 0 ) {}
  378. void SetClientBase( ULONG_PTR ul )
  379. {
  380. // On Win64 this will store the lower part into _ulClientBase
  381. _ulClientBase = (ULONG) ul;
  382. #ifdef _WIN64
  383. // Store the upper part into the reserved area.
  384. SetReserved2 ((ULONG) (ul >> 32) );
  385. #endif
  386. }
  387. ULONG GetCursor() { return _hCursor; }
  388. unsigned GetRowsToTransfer() { return _cRowsToTransfer; }
  389. size_t GetRowWidth() { return _cbRowWidth; }
  390. unsigned GetSeekSize() { return _cbSeek; }
  391. unsigned GetReservedSize() { return _cbReserved; }
  392. unsigned GetReadBufferSize() { return _cbReadBuffer; }
  393. void SetReadBufferSize( unsigned cb ) { _cbReadBuffer = cb; }
  394. ULONG_PTR GetClientBase()
  395. {
  396. #ifdef _WIN64
  397. return ( ( (ULONG_PTR) _ulClientBase ) |
  398. ( ( (ULONG_PTR) GetReserved2() ) << 32 ) );
  399. #else
  400. return _ulClientBase;
  401. #endif
  402. }
  403. BOOL GetFwdFetch() { return !_fBwdFetch; }
  404. BYTE * GetDesc() { return (BYTE *) ( this + 1 ); }
  405. private:
  406. ULONG _hCursor;
  407. unsigned _cRowsToTransfer;
  408. unsigned _cbRowWidth; // was size_t but breaks 64-bit, residual parameters above
  409. unsigned _cbSeek;
  410. unsigned _cbReserved;
  411. unsigned _cbReadBuffer;
  412. ULONG _ulClientBase; // On Win64 this value is broken into
  413. // 2 ULONGS and top half is stored in the
  414. // reserved area.
  415. ULONG _fBwdFetch; // fBwdFetch is used instead of fFwdFetch
  416. // because the value of this field is 0
  417. // for old clients and we want the default
  418. // to be forward fetch, which is what a 0 value
  419. // of fBwdFetch implies.
  420. // don't add data here -- marshalled version of rowseek follows data
  421. };
  422. //+-------------------------------------------------------------------------
  423. //
  424. // Class: CPMGetRowsOut
  425. //
  426. // Synopsis: Message reply containing rows retrieved
  427. //
  428. // History: 16-Sep-96 dlee Created.
  429. //
  430. //--------------------------------------------------------------------------
  431. class CPMGetRowsOut : public CProxyMessage
  432. {
  433. public:
  434. CPMGetRowsOut() : CProxyMessage( pmGetRows ) {}
  435. unsigned & RowsReturned() { return _cRowsReturned; }
  436. BYTE * GetSeekDesc() { return (BYTE *) ( this + 1 ); }
  437. private:
  438. unsigned _cRowsReturned;
  439. };
  440. //+-------------------------------------------------------------------------
  441. //
  442. // Class: CPMRestartPositionIn
  443. //
  444. // Synopsis: Message for setting fetch position at start for chapter
  445. //
  446. // History: 17-Apr-97 emilyb created
  447. //
  448. //--------------------------------------------------------------------------
  449. class CPMRestartPositionIn : public CProxyMessage
  450. {
  451. public:
  452. CPMRestartPositionIn( ULONG hCursor,
  453. CI_TBL_CHAPT chapt ) :
  454. CProxyMessage( pmRestartPosition ),
  455. _hCursor( hCursor ),
  456. _chapt( chapt ) {}
  457. CI_TBL_CHAPT GetChapter() { return _chapt; }
  458. ULONG GetCursor() { return _hCursor; }
  459. private:
  460. ULONG _hCursor;
  461. CI_TBL_CHAPT _chapt;
  462. };
  463. //+-------------------------------------------------------------------------
  464. //
  465. // Class: CPMStopAsynchIn
  466. //
  467. // Synopsis: Message for stopping processing async rowset
  468. //
  469. // History: 17-Apr-97 emilyb created
  470. //
  471. //--------------------------------------------------------------------------
  472. class CPMStopAsynchIn : public CProxyMessage
  473. {
  474. public:
  475. CPMStopAsynchIn( ULONG hCursor ) :
  476. CProxyMessage( pmStopAsynch ),
  477. _hCursor( hCursor ) {}
  478. ULONG GetCursor() { return _hCursor; }
  479. private:
  480. ULONG _hCursor;
  481. };
  482. //+-------------------------------------------------------------------------
  483. //
  484. // Class: CPMStartWatchingIn
  485. //
  486. // Synopsis: Message for starting watch all behavior
  487. //
  488. // History: 17-Apr-97 emilyb created
  489. //
  490. //--------------------------------------------------------------------------
  491. class CPMStartWatchingIn : public CProxyMessage
  492. {
  493. public:
  494. CPMStartWatchingIn( ULONG hCursor ) :
  495. CProxyMessage( pmStartWatching ),
  496. _hCursor( hCursor ) {}
  497. ULONG GetCursor() { return _hCursor; }
  498. private:
  499. ULONG _hCursor;
  500. };
  501. //+-------------------------------------------------------------------------
  502. //
  503. // Class: CPMStopWatchingIn
  504. //
  505. // Synopsis: Message for stopping watch all behavior
  506. //
  507. // History: 17-Apr-97 emilyb created
  508. //
  509. //--------------------------------------------------------------------------
  510. class CPMStopWatchingIn : public CProxyMessage
  511. {
  512. public:
  513. CPMStopWatchingIn( ULONG hCursor ) :
  514. CProxyMessage( pmStopWatching ),
  515. _hCursor( hCursor ) {}
  516. ULONG GetCursor() { return _hCursor; }
  517. private:
  518. ULONG _hCursor;
  519. };
  520. //+-------------------------------------------------------------------------
  521. //
  522. // Class: CPMRatioFinishedIn
  523. //
  524. // Synopsis: Message for getting ratio finished
  525. //
  526. // History: 16-Sep-96 dlee Created.
  527. //
  528. //--------------------------------------------------------------------------
  529. class CPMRatioFinishedIn : public CProxyMessage
  530. {
  531. public:
  532. CPMRatioFinishedIn( ULONG hCursor,
  533. BOOL fQuick ) :
  534. CProxyMessage( pmRatioFinished ),
  535. _hCursor( hCursor ),
  536. _fQuick( fQuick ) {}
  537. ULONG GetCursor() { return _hCursor; }
  538. ULONG GetQuick() { return _fQuick; }
  539. private:
  540. ULONG _hCursor;
  541. BOOL _fQuick;
  542. };
  543. //+-------------------------------------------------------------------------
  544. //
  545. // Class: CPMRatioFinishedOut
  546. //
  547. // Synopsis: Message reply for ratio finished
  548. //
  549. // History: 16-Sep-96 dlee Created.
  550. //
  551. //--------------------------------------------------------------------------
  552. class CPMRatioFinishedOut : public CProxyMessage
  553. {
  554. public:
  555. ULONG & Numerator() { return _ulNumerator; }
  556. ULONG & Denominator() { return _ulDenominator; }
  557. ULONG & RowCount() { return _cRows; }
  558. BOOL & NewRows() { return _fNewRows; }
  559. private:
  560. ULONG _ulNumerator;
  561. ULONG _ulDenominator;
  562. ULONG _cRows;
  563. BOOL _fNewRows;
  564. };
  565. //+-------------------------------------------------------------------------
  566. //
  567. // Class: CPMCompareBmkIn
  568. //
  569. // Synopsis: Message to compare bookmarks
  570. //
  571. // History: 16-Sep-96 dlee Created.
  572. //
  573. //--------------------------------------------------------------------------
  574. class CPMCompareBmkIn : public CProxyMessage
  575. {
  576. public:
  577. CPMCompareBmkIn( ULONG hCursor,
  578. CI_TBL_CHAPT chapt,
  579. CI_TBL_BMK bmkFirst,
  580. CI_TBL_BMK bmkSecond ) :
  581. CProxyMessage( pmCompareBmk ),
  582. _hCursor( hCursor ),
  583. _chapt( chapt ),
  584. _bmkFirst( bmkFirst ),
  585. _bmkSecond( bmkSecond ) {}
  586. ULONG GetCursor() { return _hCursor; }
  587. CI_TBL_CHAPT GetChapter() { return _chapt; }
  588. CI_TBL_BMK GetBmkFirst() { return _bmkFirst; }
  589. CI_TBL_BMK GetBmkSecond() { return _bmkSecond; }
  590. private:
  591. ULONG _hCursor;
  592. CI_TBL_CHAPT _chapt;
  593. CI_TBL_BMK _bmkFirst;
  594. CI_TBL_BMK _bmkSecond;
  595. };
  596. //+-------------------------------------------------------------------------
  597. //
  598. // Class: CPMCompareBmkOut
  599. //
  600. // Synopsis: Message reply for compare bookmarks
  601. //
  602. // History: 16-Sep-96 dlee Created.
  603. //
  604. //--------------------------------------------------------------------------
  605. class CPMCompareBmkOut : public CProxyMessage
  606. {
  607. public:
  608. DWORD & Comparison() { return _dwComparison; }
  609. private:
  610. DWORD _dwComparison;
  611. };
  612. //+-------------------------------------------------------------------------
  613. //
  614. // Class: CPMGetApproximatePositionIn
  615. //
  616. // Synopsis: Message request for getting approximate position
  617. //
  618. // History: 16-Sep-96 dlee Created.
  619. //
  620. //--------------------------------------------------------------------------
  621. class CPMGetApproximatePositionIn : public CProxyMessage
  622. {
  623. public:
  624. CPMGetApproximatePositionIn( ULONG hCursor,
  625. CI_TBL_CHAPT chapt,
  626. CI_TBL_BMK bmk ) :
  627. CProxyMessage( pmGetApproximatePosition ),
  628. _hCursor( hCursor ),
  629. _chapt( chapt ),
  630. _bmk( bmk ) {}
  631. ULONG GetCursor() { return _hCursor; }
  632. CI_TBL_CHAPT GetChapter() { return _chapt; }
  633. CI_TBL_BMK GetBmk() { return _bmk; }
  634. private:
  635. ULONG _hCursor;
  636. CI_TBL_CHAPT _chapt;
  637. CI_TBL_BMK _bmk;
  638. };
  639. //+-------------------------------------------------------------------------
  640. //
  641. // Class: CPMGetApproximatePositionOut
  642. //
  643. // Synopsis: Message reply for getting approximate position
  644. //
  645. // History: 16-Sep-96 dlee Created.
  646. //
  647. //--------------------------------------------------------------------------
  648. class CPMGetApproximatePositionOut : public CProxyMessage
  649. {
  650. public:
  651. ULONG & Numerator() { return _numerator; }
  652. ULONG & Denominator() { return _denominator; }
  653. private:
  654. ULONG _numerator;
  655. ULONG _denominator;
  656. };
  657. //+-------------------------------------------------------------------------
  658. //
  659. // Class: CPMSetBindingsIn
  660. //
  661. // Synopsis: Message request to set bindings
  662. //
  663. // History: 16-Sep-96 dlee Created.
  664. //
  665. //--------------------------------------------------------------------------
  666. class CPMSetBindingsIn : public CProxyMessage
  667. {
  668. public:
  669. CPMSetBindingsIn( ULONG hCursor,
  670. ULONG cbRow,
  671. ULONG cbBindingDesc ) :
  672. CProxyMessage( pmSetBindings ),
  673. _hCursor( hCursor ),
  674. _cbRow( cbRow ),
  675. _cbBindingDesc( cbBindingDesc ) {}
  676. ULONG GetCursor() { return _hCursor; }
  677. ULONG GetRowLength() { return _cbRow; }
  678. ULONG GetBindingDescLength() { return _cbBindingDesc; }
  679. BYTE * GetDescription() { return (BYTE *) ( this + 1 ); }
  680. private:
  681. ULONG _hCursor;
  682. ULONG _cbRow;
  683. ULONG _cbBindingDesc;
  684. ULONG _dummy; // force 8-byte alignment of description
  685. // don't add data here -- marshalled version of bindings follows data
  686. };
  687. //+-------------------------------------------------------------------------
  688. //
  689. // Class: CPMSendNotifyOut
  690. //
  691. // Synopsis: Message reply for notifications
  692. //
  693. // History: 16-Sep-96 dlee Created.
  694. //
  695. //--------------------------------------------------------------------------
  696. class CPMSendNotifyOut : public CProxyMessage
  697. {
  698. public:
  699. CPMSendNotifyOut( DBWATCHNOTIFY wn ) :
  700. CProxyMessage( pmSendNotify ),
  701. _watchNotify( wn ) {}
  702. DBWATCHNOTIFY & WatchNotify() { return _watchNotify; }
  703. private:
  704. DBWATCHNOTIFY _watchNotify;
  705. };
  706. //+-------------------------------------------------------------------------
  707. //
  708. // Class: CPMSetWatchModeIn
  709. //
  710. // Synopsis: Message to set watch mode
  711. //
  712. // History: 16-Sep-96 dlee Created.
  713. //
  714. //--------------------------------------------------------------------------
  715. class CPMSetWatchModeIn : public CProxyMessage
  716. {
  717. public:
  718. CPMSetWatchModeIn( HWATCHREGION hRegion, ULONG mode ) :
  719. CProxyMessage( pmSetWatchMode ),
  720. _hRegion( hRegion ),
  721. _mode( mode ) {}
  722. HWATCHREGION GetRegion() { return _hRegion; }
  723. ULONG GetMode() { return _mode; }
  724. private:
  725. HWATCHREGION _hRegion;
  726. ULONG _mode;
  727. };
  728. //+-------------------------------------------------------------------------
  729. //
  730. // Class: CPMSetWatchModeOut
  731. //
  732. // Synopsis: Message reply for setting watch mode
  733. //
  734. // History: 16-Sep-96 dlee Created.
  735. //
  736. //--------------------------------------------------------------------------
  737. class CPMSetWatchModeOut : public CProxyMessage
  738. {
  739. public:
  740. HWATCHREGION & Region() { return _hRegion; }
  741. private:
  742. HWATCHREGION _hRegion;
  743. };
  744. //+-------------------------------------------------------------------------
  745. //
  746. // Class: CPMGetWatchInfoIn
  747. //
  748. // Synopsis: Message for getting watch info
  749. //
  750. // History: 16-Sep-96 dlee Created.
  751. //
  752. //--------------------------------------------------------------------------
  753. class CPMGetWatchInfoIn : public CProxyMessage
  754. {
  755. public:
  756. CPMGetWatchInfoIn( HWATCHREGION hRegion ) :
  757. CProxyMessage( pmGetWatchInfo ),
  758. _hRegion( hRegion ) {}
  759. HWATCHREGION GetRegion() { return _hRegion; }
  760. private:
  761. HWATCHREGION _hRegion;
  762. };
  763. //+-------------------------------------------------------------------------
  764. //
  765. // Class: CPMGetWatchInfoOut
  766. //
  767. // Synopsis: Message reply for getting watch info
  768. //
  769. // History: 16-Sep-96 dlee Created.
  770. //
  771. //--------------------------------------------------------------------------
  772. class CPMGetWatchInfoOut : public CProxyMessage
  773. {
  774. public:
  775. ULONG & Mode() { return _mode; }
  776. CI_TBL_CHAPT & Chapter() { return _chapt; }
  777. CI_TBL_BMK & Bookmark() { return _bmk; }
  778. ULONG & RowCount() { return _cRows; }
  779. private:
  780. ULONG _mode;
  781. CI_TBL_CHAPT _chapt;
  782. CI_TBL_BMK _bmk;
  783. ULONG _cRows;
  784. };
  785. //+-------------------------------------------------------------------------
  786. //
  787. // Class: CPMShrinkWatchRegionIn
  788. //
  789. // Synopsis: Message for shrinking watch region
  790. //
  791. // History: 16-Sep-96 dlee Created.
  792. //
  793. //--------------------------------------------------------------------------
  794. class CPMShrinkWatchRegionIn : public CProxyMessage
  795. {
  796. public:
  797. CPMShrinkWatchRegionIn( HWATCHREGION hRegion,
  798. CI_TBL_CHAPT chapter,
  799. CI_TBL_BMK bookmark,
  800. ULONG cRows ) :
  801. CProxyMessage( pmShrinkWatchRegion ),
  802. _hRegion( hRegion ),
  803. _chapter( chapter ),
  804. _bookmark( bookmark ),
  805. _cRows( cRows ) {}
  806. HWATCHREGION GetRegion() { return _hRegion; }
  807. CI_TBL_CHAPT GetChapter() { return _chapter; }
  808. CI_TBL_BMK GetBookmark() { return _bookmark; }
  809. LONG GetRowCount() { return _cRows; }
  810. private:
  811. HWATCHREGION _hRegion;
  812. CI_TBL_CHAPT _chapter;
  813. CI_TBL_BMK _bookmark;
  814. LONG _cRows;
  815. };
  816. //+-------------------------------------------------------------------------
  817. //
  818. // Class: CPMGetQueryStatusIn
  819. //
  820. // Synopsis: Message for getting query status
  821. //
  822. // History: 16-Sep-96 dlee Created.
  823. //
  824. //--------------------------------------------------------------------------
  825. class CPMGetQueryStatusIn : public CProxyMessage
  826. {
  827. public:
  828. CPMGetQueryStatusIn( ULONG hCursor ) :
  829. CProxyMessage( pmGetQueryStatus ),
  830. _hCursor( hCursor ) {}
  831. ULONG GetCursor() { return _hCursor; }
  832. private:
  833. ULONG _hCursor;
  834. };
  835. //+-------------------------------------------------------------------------
  836. //
  837. // Class: CPMGetQueryStatusOut
  838. //
  839. // Synopsis: Message reply for getting query status
  840. //
  841. // History: 16-Sep-96 dlee Created.
  842. //
  843. //--------------------------------------------------------------------------
  844. class CPMGetQueryStatusOut : public CProxyMessage
  845. {
  846. public:
  847. DWORD & QueryStatus() { return _status; }
  848. private:
  849. DWORD _status;
  850. };
  851. //+-------------------------------------------------------------------------
  852. //
  853. // Class: CPMGetQueryStatusExIn
  854. //
  855. // Synopsis: Message for getting query status Ex
  856. //
  857. // History: 16-Sep-96 dlee Created.
  858. //
  859. //--------------------------------------------------------------------------
  860. class CPMGetQueryStatusExIn : public CProxyMessage
  861. {
  862. public:
  863. CPMGetQueryStatusExIn( ULONG hCursor, ULONG bmk ) :
  864. CProxyMessage( pmGetQueryStatusEx ),
  865. _hCursor( hCursor ),
  866. _bmk( bmk ) {}
  867. ULONG GetCursor() { return _hCursor; }
  868. ULONG GetBookmark() { return _bmk; }
  869. private:
  870. ULONG _hCursor;
  871. ULONG _bmk;
  872. };
  873. //+-------------------------------------------------------------------------
  874. //
  875. // Class: CPMGetQueryStatusExOut
  876. //
  877. // Synopsis: Message reply for getting query status
  878. //
  879. // History: 16-Sep-96 dlee Created.
  880. //
  881. //--------------------------------------------------------------------------
  882. class CPMGetQueryStatusExOut : public CProxyMessage
  883. {
  884. public:
  885. DWORD & QueryStatus() { return _status; }
  886. DWORD & FilteredDocuments() { return _cFilteredDocuments; }
  887. DWORD & DocumentsToFilter() { return _cDocumentsToFilter; }
  888. ULONG & RatioFinishedDenominator() { return _dwRatioFinishedDenominator; }
  889. ULONG & RatioFinishedNumerator() { return _dwRatioFinishedNumerator; }
  890. ULONG & RowBmk() { return _iRowBmk; }
  891. ULONG & RowsTotal() { return _cRowsTotal; }
  892. private:
  893. DWORD _status;
  894. DWORD _cFilteredDocuments;
  895. DWORD _cDocumentsToFilter;
  896. ULONG _dwRatioFinishedDenominator;
  897. ULONG _dwRatioFinishedNumerator;
  898. ULONG _iRowBmk;
  899. ULONG _cRowsTotal;
  900. };
  901. //+-------------------------------------------------------------------------
  902. //
  903. // Class: CPMCiStateInOut
  904. //
  905. // Synopsis: Message request/reply for ci state
  906. //
  907. // History: 16-Sep-96 dlee Created.
  908. //
  909. //--------------------------------------------------------------------------
  910. class CPMCiStateInOut : public CProxyMessage
  911. {
  912. public:
  913. CPMCiStateInOut( DWORD cbStruct ) :
  914. CProxyMessage( pmCiState )
  915. {
  916. RtlZeroMemory( &_state, sizeof _state );
  917. if (cbStruct <= sizeof _state)
  918. _state.cbStruct = cbStruct;
  919. else
  920. _state.cbStruct = sizeof _state;
  921. }
  922. CPMCiStateInOut()
  923. {
  924. // Setting this to 0 here, cause we have added a new
  925. // member to CI_STATE, which older servers don't have
  926. RtlZeroMemory( &_state, sizeof _state );
  927. _state.cbStruct = sizeof _state;
  928. }
  929. CI_STATE & GetState() { return _state; }
  930. private:
  931. CI_STATE _state;
  932. };
  933. //+-------------------------------------------------------------------------
  934. //
  935. // Class: CPMForceMergeIn
  936. //
  937. // Synopsis: Message to force a merge
  938. //
  939. // History: 16-Sep-96 dlee Created.
  940. //
  941. //--------------------------------------------------------------------------
  942. class CPMForceMergeIn : public CProxyMessage
  943. {
  944. public:
  945. CPMForceMergeIn( PARTITIONID partID ) :
  946. CProxyMessage( pmForceMerge ),
  947. _partID( partID ) {}
  948. PARTITIONID GetPartID() { return _partID; }
  949. private:
  950. PARTITIONID _partID;
  951. };
  952. //+-------------------------------------------------------------------------
  953. //
  954. // Class: CPMAbortMergeIn
  955. //
  956. // Synopsis: Message to abort a merge
  957. //
  958. // History: 16-Sep-96 dlee Created.
  959. //
  960. //--------------------------------------------------------------------------
  961. class CPMAbortMergeIn : public CProxyMessage
  962. {
  963. public:
  964. CPMAbortMergeIn( PARTITIONID partID ) :
  965. CProxyMessage( pmForceMerge ),
  966. _partID( partID ) {}
  967. PARTITIONID GetPartID() { return _partID; }
  968. private:
  969. PARTITIONID _partID;
  970. };
  971. //+-------------------------------------------------------------------------
  972. //
  973. // Class: CPMBeginCacheTransactionOut
  974. //
  975. // Synopsis: Message reply to begin a cache transaction
  976. //
  977. // History: 16-Sep-96 dlee Created.
  978. //
  979. //--------------------------------------------------------------------------
  980. class CPMBeginCacheTransactionOut : public CProxyMessage
  981. {
  982. public:
  983. ULONG_PTR & GetToken() { return _token; }
  984. private:
  985. ULONG_PTR _token;
  986. };
  987. //+-------------------------------------------------------------------------
  988. //
  989. // Class: CPMSetupCacheIn
  990. //
  991. // Synopsis: Message to setup the property cache
  992. //
  993. // History: 16-Sep-96 dlee Created.
  994. //
  995. //--------------------------------------------------------------------------
  996. class CPMSetupCacheIn : public CProxyMessage
  997. {
  998. public:
  999. CPMSetupCacheIn( ULONG cbPS,
  1000. ULONG_PTR ulToken,
  1001. ULONG vt,
  1002. ULONG cbMaxLen,
  1003. BOOL fCanBeModified,
  1004. DWORD dwStoreLevel ) :
  1005. CProxyMessage( pmSetupCache ),
  1006. _ulToken( ulToken ),
  1007. _vt( vt ),
  1008. _cbMaxLen( cbMaxLen ),
  1009. _cbPS( cbPS )
  1010. {
  1011. // primary and secondary are 0 and 1
  1012. // can't include fsciexps.hxx here
  1013. Win4Assert( dwStoreLevel <= 0xffff );
  1014. USHORT usf = ( 0 != fCanBeModified );
  1015. USHORT usl = (USHORT) dwStoreLevel;
  1016. SetReserved2( MAKELONG( usf, usl ) );
  1017. }
  1018. ULONG_PTR GetToken() { return _ulToken; }
  1019. ULONG GetVT() { return _vt; }
  1020. ULONG GetMaxLen() { return _cbMaxLen; }
  1021. ULONG GetPSSize() { return _cbPS; }
  1022. BOOL IsModifiable() { return (BOOL) LOWORD( GetReserved2() ); }
  1023. DWORD GetStoreLevel() { return (DWORD) HIWORD( GetReserved2() ); }
  1024. BYTE * GetPS() { return (BYTE *) (this + 1); }
  1025. private:
  1026. ULONG_PTR _ulToken;
  1027. ULONG _vt;
  1028. ULONG _cbMaxLen;
  1029. ULONG _cbPS;
  1030. // don't add data here -- marshalled version of propspec follows data
  1031. };
  1032. //+-------------------------------------------------------------------------
  1033. //
  1034. // Class: CPMEndCacheTransactionIn
  1035. //
  1036. // Synopsis: Message request to end a cache transaction
  1037. //
  1038. // History: 16-Sep-96 dlee Created.
  1039. //
  1040. //--------------------------------------------------------------------------
  1041. class CPMEndCacheTransactionIn : public CProxyMessage
  1042. {
  1043. public:
  1044. CPMEndCacheTransactionIn( ULONG_PTR ulToken, BOOL fCommit ) :
  1045. CProxyMessage( pmEndCacheTransaction ),
  1046. _ulToken( ulToken ),
  1047. _fCommit( fCommit ) {}
  1048. ULONG_PTR GetToken() { return _ulToken; }
  1049. BOOL GetCommit() { return _fCommit; }
  1050. private:
  1051. ULONG_PTR _ulToken;
  1052. BOOL _fCommit;
  1053. };
  1054. //+-------------------------------------------------------------------------
  1055. //
  1056. // Class: CPMAddScopeIn
  1057. //
  1058. // Synopsis: Message to add a scope for filtering
  1059. //
  1060. // History: 16-Sep-96 dlee Created.
  1061. //
  1062. //--------------------------------------------------------------------------
  1063. class CPMAddScopeIn : public CProxyMessage
  1064. {
  1065. public:
  1066. CPMAddScopeIn( WCHAR const * pRoot ) :
  1067. CProxyMessage( pmAddScope )
  1068. {
  1069. wcscpy( GetRoot(), pRoot );
  1070. }
  1071. static unsigned SizeOf( WCHAR const *pwc )
  1072. {
  1073. return sizeof CPMAddScopeIn +
  1074. ( ( wcslen( pwc ) + 1 ) * sizeof WCHAR );
  1075. }
  1076. WCHAR * GetRoot() { return (WCHAR *) (this + 1); }
  1077. };
  1078. //+-------------------------------------------------------------------------
  1079. //
  1080. // Class: CPMRemoveScopeIn
  1081. //
  1082. // Synopsis: Message to remove a scope from filtering
  1083. //
  1084. // History: 16-Sep-96 dlee Created.
  1085. //
  1086. //--------------------------------------------------------------------------
  1087. class CPMRemoveScopeIn : public CProxyMessage
  1088. {
  1089. public:
  1090. CPMRemoveScopeIn( WCHAR const * pRoot ) :
  1091. CProxyMessage( pmRemoveScope )
  1092. {
  1093. wcscpy( GetRoot(), pRoot );
  1094. }
  1095. static unsigned SizeOf( WCHAR const *pwc )
  1096. {
  1097. return sizeof CPMRemoveScopeIn +
  1098. ( ( wcslen( pwc ) + 1 ) * sizeof WCHAR );
  1099. }
  1100. WCHAR * GetRoot() { return (WCHAR *) (this + 1); }
  1101. };
  1102. //+-------------------------------------------------------------------------
  1103. //
  1104. // Class: CPMFetchValueIn
  1105. //
  1106. // Synopsis: Message fetch all or part of a property value
  1107. //
  1108. // History: 16-Sep-96 dlee Created.
  1109. //
  1110. //--------------------------------------------------------------------------
  1111. class CPMFetchValueIn : public CProxyMessage
  1112. {
  1113. public:
  1114. CPMFetchValueIn( WORKID wid,
  1115. DWORD cbSoFar,
  1116. DWORD cbPropSpec,
  1117. DWORD cbChunk ) :
  1118. CProxyMessage( pmFetchValue ),
  1119. _wid( wid ),
  1120. _cbSoFar( cbSoFar ),
  1121. _cbPropSpec( cbPropSpec ),
  1122. _cbChunk( cbChunk ) {}
  1123. WORKID GetWID() { return _wid; }
  1124. DWORD GetSoFar() { return _cbSoFar; }
  1125. DWORD GetPSSize() { return _cbPropSpec; }
  1126. DWORD GetChunkSize() { return _cbChunk; }
  1127. BYTE * GetPS() { return (BYTE *) (this + 1); }
  1128. private:
  1129. WORKID _wid; // WORKID if file with property value
  1130. DWORD _cbSoFar; // # of bytes transferred so far
  1131. DWORD _cbPropSpec; // # of bytes taken by propspec
  1132. DWORD _cbChunk; // # of bytes max that can be written
  1133. // don't add data here -- marshalled version of propspec follows data
  1134. };
  1135. //+-------------------------------------------------------------------------
  1136. //
  1137. // Class: CPMFetchValueOut
  1138. //
  1139. // Synopsis: Message reply containing all or part of a property value
  1140. //
  1141. // History: 16-Sep-96 dlee Created.
  1142. //
  1143. //--------------------------------------------------------------------------
  1144. class CPMFetchValueOut : public CProxyMessage
  1145. {
  1146. public:
  1147. CPMFetchValueOut() : CProxyMessage( pmFetchValue ) {}
  1148. DWORD & ValueSize() { return _cbValue; }
  1149. BOOL & ValueExists() { return _fValueExists; }
  1150. BOOL & MoreExists() { return _fMoreExists; }
  1151. void * Value() { return (void *) (this+1); }
  1152. private:
  1153. DWORD _cbValue; // # of bytes transferred in this chunk
  1154. BOOL _fMoreExists; // TRUE if more chunks exist
  1155. BOOL _fValueExists; // TRUE if there was a value, FALSE otherwise
  1156. // don't add data here -- marshalled version of property val follows data
  1157. };
  1158. //+-------------------------------------------------------------------------
  1159. //
  1160. // Class: CPMWorkIdToPathIn
  1161. //
  1162. // Synopsis: Message to translate a workid to a path
  1163. //
  1164. // History: 16-Sep-96 dlee Created.
  1165. //
  1166. //--------------------------------------------------------------------------
  1167. class CPMWorkIdToPathIn : public CProxyMessage
  1168. {
  1169. public:
  1170. CPMWorkIdToPathIn( WORKID wid ) :
  1171. CProxyMessage( pmWorkIdToPath ),
  1172. _wid( wid ) {}
  1173. WORKID GetWorkId() { return _wid; }
  1174. private:
  1175. WORKID _wid;
  1176. };
  1177. //+-------------------------------------------------------------------------
  1178. //
  1179. // Class: CPMWorkIdToPathOut
  1180. //
  1181. // Synopsis: Message reply containing a path for a workid
  1182. //
  1183. // History: 16-Sep-96 dlee Created.
  1184. //
  1185. //--------------------------------------------------------------------------
  1186. class CPMWorkIdToPathOut : public CProxyMessage
  1187. {
  1188. public:
  1189. WCHAR * Path() { return (WCHAR *) (this + 1); }
  1190. BOOL & Any() { return _fAny; }
  1191. private:
  1192. BOOL _fAny;
  1193. // don't add data here -- marshalled version of path follows data
  1194. };
  1195. //+-------------------------------------------------------------------------
  1196. //
  1197. // Class: CPMUpdateDocumentsIn
  1198. //
  1199. // Synopsis: Message to force scans
  1200. //
  1201. // History: 16-Sep-96 dlee Created.
  1202. //
  1203. //--------------------------------------------------------------------------
  1204. class CPMUpdateDocumentsIn : public CProxyMessage
  1205. {
  1206. public:
  1207. CPMUpdateDocumentsIn( WCHAR const * pwcRootPath, ULONG flag ) :
  1208. CProxyMessage( pmUpdateDocuments ),
  1209. _flag( flag ),
  1210. _fRootPath( 0 != pwcRootPath )
  1211. {
  1212. if ( _fRootPath )
  1213. wcscpy( GetRootPath(), pwcRootPath );
  1214. }
  1215. static unsigned SizeOf( WCHAR const * pwcRootPath )
  1216. {
  1217. unsigned cb = sizeof CPMUpdateDocumentsIn;
  1218. if ( 0 != pwcRootPath )
  1219. cb += sizeof WCHAR * ( 1 + wcslen( pwcRootPath ) );
  1220. return cb;
  1221. }
  1222. ULONG GetFlag() { return _flag; }
  1223. WCHAR *GetRootPath() { return _fRootPath ? (WCHAR *) (this + 1) : 0; }
  1224. private:
  1225. ULONG _flag;
  1226. BOOL _fRootPath;
  1227. // don't add data here -- marshalled version of path follows data
  1228. };
  1229. //+-------------------------------------------------------------------------
  1230. //
  1231. // Class: CPMSetCatStateIn
  1232. //
  1233. // Synopsis: Message to Set the catalog in a specified state
  1234. //
  1235. // History: 08-Apr-98 kitmanh Created.
  1236. //
  1237. //--------------------------------------------------------------------------
  1238. class CPMSetCatStateIn : public CProxyMessage
  1239. {
  1240. public:
  1241. CPMSetCatStateIn( PARTITIONID partID,
  1242. WCHAR const * pwcsCatalog,
  1243. DWORD dwNewState ) :
  1244. CProxyMessage( pmSetCatState ),
  1245. _partID( partID ),
  1246. _dwNewState( dwNewState )
  1247. {
  1248. if ( 0 != pwcsCatalog )
  1249. wcscpy( GetCatName(), pwcsCatalog );
  1250. }
  1251. static unsigned SizeOf( WCHAR const * pwcsCatalog )
  1252. {
  1253. unsigned cb = sizeof CPMSetCatStateIn;
  1254. if ( 0 != pwcsCatalog )
  1255. cb += sizeof WCHAR * ( 1 + wcslen( pwcsCatalog ) );
  1256. return cb;
  1257. }
  1258. PARTITIONID GetPartID() { return _partID; }
  1259. DWORD GetNewState() { return _dwNewState; }
  1260. WCHAR * GetCatName()
  1261. {
  1262. return (WCHAR *) (this + 1);
  1263. }
  1264. private:
  1265. PARTITIONID _partID;
  1266. DWORD _dwNewState;
  1267. };
  1268. //+-------------------------------------------------------------------------
  1269. //
  1270. // Class: CPMSetCatStateOut
  1271. //
  1272. // Synopsis: Message reply for SetCatState
  1273. //
  1274. // History: 08-Apr-98 kitmanh Created.
  1275. //
  1276. //--------------------------------------------------------------------------
  1277. class CPMSetCatStateOut : public CProxyMessage
  1278. {
  1279. public:
  1280. DWORD & GetOldState() { return _dwOldState; }
  1281. private:
  1282. DWORD _dwOldState;
  1283. };