Leaked source code of windows server 2003
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.

197 lines
8.9 KiB

  1. // Copyright (c) 1996-1999 Microsoft Corporation
  2. //+============================================================================
  3. //
  4. // wksconfig.cxx
  5. //
  6. // This file implements the CTrkWksConfiguration class, which maintains
  7. // run-time configuration parameters for the trkwks service.
  8. //
  9. //+============================================================================
  10. #include "pch.cxx"
  11. #include "trkwks.hxx"
  12. //+----------------------------------------------------------------------------
  13. //
  14. // CTrkWksConfiguration::_Parameters
  15. //
  16. // This array holds all the configurable parameters for the trkwks service.
  17. // It holds the registry value name, the default value, etc. Static
  18. // configuration values may only
  19. //
  20. //+----------------------------------------------------------------------------
  21. STrkConfigRecord CTrkWksConfiguration::_Parameters[] =
  22. {
  23. TRKCONFIGRECORD( TEXT("Refresh"), ( 30 * TRKDAY ), 0, TRKCONFIG_STATIC, REFRESH_PERIOD_CONFIG ),
  24. TRKCONFIGRECORD( TEXT("RefreshHesitation"), ( 6 * TRKHOUR ), 0, TRKCONFIG_STATIC, REFRESH_HESITATION_CONFIG ),
  25. TRKCONFIGRECORD( TEXT("RefreshRetryMin"), ( 1 * TRKHOUR ), 0, TRKCONFIG_STATIC, REFRESH_RETRY_MIN_CONFIG ),
  26. TRKCONFIGRECORD( TEXT("RefreshRetryMax"), ( 1 * TRKDAY ), 0, TRKCONFIG_STATIC, REFRESH_RETRY_MAX_CONFIG ),
  27. TRKCONFIGRECORD( TEXT("PortThreadKeepAliveTime"), 30, 0, TRKCONFIG_STATIC, PORT_THREAD_KEEP_ALIVE_TIME_CONFIG ),
  28. TRKCONFIGRECORD( TEXT("MaxReferrals"), 100, 0, TRKCONFIG_STATIC, MAX_REFERRALS_CONFIG ),
  29. TRKCONFIGRECORD( TEXT("PortNotifyError"), 0, 0, TRKCONFIG_STATIC, PORT_NOTIFY_ERROR_CONFIG ),
  30. TRKCONFIGRECORD( TEXT("MinLogKB"), 20, 0, TRKCONFIG_STATIC, MIN_LOG_KB_CONFIG ),
  31. TRKCONFIGRECORD( TEXT("MaxLogKB"), 1000, 0, TRKCONFIG_STATIC, MAX_LOG_KB_CONFIG ),
  32. TRKCONFIGRECORD( TEXT("LogDeltaKB"), 10, 0, TRKCONFIG_STATIC, LOG_DELTA_KB_CONFIG ),
  33. TRKCONFIGRECORD( TEXT("LogOverwriteAge"), ( 30 * TRKDAY ), 0, TRKCONFIG_STATIC, LOG_OVERWRITE_AGE_CONFIG ),
  34. TRKCONFIGRECORD( TEXT("LogFileOpenTime"), 10 /*seconds*/, 0, TRKCONFIG_STATIC, LOG_FILE_OPEN_TIME_CONFIG ),
  35. TRKCONFIGRECORD( TEXT("VolFrequentTasksPeriod"), TRKDAY, 0, TRKCONFIG_STATIC, VOL_FREQUENT_TASKS_PERIOD_CONFIG ),
  36. TRKCONFIGRECORD( TEXT("VolInfrequentTasksPeriod"), TRKWEEK, 0, TRKCONFIG_STATIC, VOL_INFREQUENT_TASKS_PERIOD_CONFIG ),
  37. TRKCONFIGRECORD( TEXT("VolInitInitialDelay"), TRKMINUTE, 0, TRKCONFIG_STATIC, VOL_INIT_INITIAL_DELAY_CONFIG ),
  38. TRKCONFIGRECORD( TEXT("VolInitRetryDelay1"), (30*TRKMINUTE), 0, TRKCONFIG_STATIC, VOL_INIT_RETRY_DELAY1_CONFIG ),
  39. TRKCONFIGRECORD( TEXT("VolInitRetryDelay2"), (2*TRKHOUR), 0, TRKCONFIG_STATIC, VOL_INIT_RETRY_DELAY2_CONFIG ),
  40. TRKCONFIGRECORD( TEXT("VolInitLifetime"), (6*TRKHOUR), 0, TRKCONFIG_STATIC, VOL_INIT_LIFETIME_CONFIG ),
  41. TRKCONFIGRECORD( TEXT("VolNotOwnedExpireLimit"), TRKWEEK, 0, TRKCONFIG_STATIC, VOL_NOT_OWNED_EXPIRE_LIMIT_CONFIG ),
  42. TRKCONFIGRECORD( TEXT("VolPeriodicTasksHesitation"), 2*TRKHOUR, 0, TRKCONFIG_STATIC, VOL_PERIODIC_TASKS_HESITATION_CONFIG ),
  43. TRKCONFIGRECORD( TEXT("MoveNotifyTimeout"), 30, 0, TRKCONFIG_STATIC, MOVE_NOTIFY_TIMEOUT_CONFIG ),
  44. TRKCONFIGRECORD( TEXT("MinMoveNotifyRetry"), 30, 0, TRKCONFIG_STATIC, MIN_MOVE_NOTIFY_RETRY_CONFIG ),
  45. TRKCONFIGRECORD( TEXT("MaxMoveNotifyRetry"), ( 4 * TRKHOUR ), 0, TRKCONFIG_STATIC, MAX_MOVE_NOTIFY_RETRY_CONFIG ),
  46. TRKCONFIGRECORD( TEXT("MaxMoveNotifyLifetime"), TRKDAY, 0, TRKCONFIG_STATIC, MAX_MOVE_NOTIFY_LIFETIME_CONFIG ),
  47. TRKCONFIGRECORD( TEXT("ObjIdIndexReopen"), TRKMINUTE, 0, TRKCONFIG_STATIC, OBJID_INDEX_REOPEN_CONFIG ),
  48. TRKCONFIGRECORD( TEXT("ObjIdIndexReopenRetryMax"), TRKMINUTE, 0, TRKCONFIG_STATIC, OBJID_INDEX_REOPEN_RETRY_MAX_CONFIG ),
  49. TRKCONFIGRECORD( TEXT("ObjIdIndexReopenRetryMin"), TRKMINUTE, 0, TRKCONFIG_STATIC, OBJID_INDEX_REOPEN_RETRY_MIN_CONFIG ),
  50. TRKCONFIGRECORD( TEXT("ObjIdIndexReopenLifetime"), ( 20 * TRKMINUTE ), 0, TRKCONFIG_STATIC, OBJID_INDEX_REOPEN_LIFETIME_CONFIG ),
  51. TRKCONFIGRECORD( TEXT("IgnoreMovesAndDeletes"), 0, 0, TRKCONFIG_DYNAMIC,IGNORE_MOVES_AND_DELETES_CONFIG ),
  52. TRKCONFIGRECORD( TEXT("BreakOnErrors"), 0, 0, TRKCONFIG_STATIC, BREAK_ON_ERRORS_CONFIG ), // Treated as a bool
  53. TRKCONFIGRECORD( TEXT("DeleteNotifyTimeout"), ( 5 * TRKMINUTE ), 0, TRKCONFIG_STATIC, DELETE_NOTIFY_TIMEOUT_CONFIG ),
  54. TRKCONFIGRECORD( TEXT("MaxTunnelDelay"), 3, 0, TRKCONFIG_STATIC, MAX_TUNNEL_DELAY_CONFIG ), // Seconds
  55. TRKCONFIGRECORD( TEXT("MaxSendsPerMoveNotify"), 26, 0, TRKCONFIG_STATIC, MAX_SENDS_PER_MOVE_NOTIFY_CONFIG ),
  56. TRKCONFIGRECORD( TEXT("WksMaxRpcCalls"), 20, 0, TRKCONFIG_STATIC, WKS_MAX_RPC_CALLS_CONFIG ),
  57. TRKCONFIGRECORD( TEXT("VolCacheTimeToLive"), ( 5 * TRKMINUTE ), 0, TRKCONFIG_DYNAMIC,VOLCACHE_TIME_TO_LIVE_CONFIG ),
  58. TRKCONFIGRECORD( TEXT("MaxDeleteNotifyQueue"), 5000, 0, TRKCONFIG_STATIC, MAX_DELETE_NOTIFY_QUEUE_CONFIG ),
  59. TRKCONFIGRECORD( TEXT("MaxDeleteNotifyAttempts"), 100, 0, TRKCONFIG_STATIC, MAX_DELETE_NOTIFY_ATTEMPTS_CONFIG )
  60. };
  61. //+----------------------------------------------------------------------------
  62. //
  63. // CTrkWksConfiguration::SetParameter
  64. //
  65. // Set a DWORD parameter in the _Parameters array, but don't update
  66. // the registry value.
  67. //
  68. //+----------------------------------------------------------------------------
  69. BOOL
  70. CTrkWksConfiguration::SetParameter( DWORD dwParameter, DWORD dwValue )
  71. {
  72. if( dwParameter >= ELEMENTS( _Parameters ))
  73. return( FALSE );
  74. _Parameters[ dwParameter ].dwValue = dwValue;
  75. return( TRUE );
  76. }
  77. //+----------------------------------------------------------------------------
  78. //
  79. // CTrkWksConfiguration::PersistParameter
  80. //
  81. // Set a DWORD parameter value in the registry, but don't update it
  82. // in the _Parameters array.
  83. //
  84. //+----------------------------------------------------------------------------
  85. BOOL
  86. CTrkWksConfiguration::PersistParameter( DWORD dwParameter, DWORD dwValue )
  87. {
  88. if( dwParameter >= _cParameters )
  89. {
  90. TrkLog(( TRKDBG_WARNING, TEXT("Attempt to set invalid parameter (%d/%d)"),
  91. dwParameter, _cParameters ));
  92. return( FALSE );
  93. }
  94. return( Write( _Parameters[dwParameter].ptszName, dwValue ));
  95. }
  96. //+----------------------------------------------------------------------------
  97. //
  98. // CTrkWksConfiguration::ProcessInvalidParameter
  99. //
  100. // Common code for handling an attempt to set/get a parameter that does
  101. // not exist.
  102. //
  103. //+----------------------------------------------------------------------------
  104. void
  105. CTrkWksConfiguration::ProcessInvalidParameter( DWORD dwParameter ) const
  106. {
  107. // This is a non-inline routine so that we can use TrkLog & TrkRaise
  108. TrkLog(( TRKDBG_WARNING, TEXT("Invalid parameter request (%d)"), dwParameter ));
  109. TrkRaiseException( E_FAIL );
  110. }
  111. //+----------------------------------------------------------------------------
  112. //
  113. // CTrkWksConfiguration::Initialize
  114. //
  115. // Initialize this trkwks configuration class by initializing the base
  116. // CTrkConfiguration class and reading in all the parameters. If
  117. // fPersistable is set, we'll keep the registry key open so that
  118. // we can later do writes.
  119. //
  120. //+----------------------------------------------------------------------------
  121. void
  122. CTrkWksConfiguration::Initialize( BOOL fPersistable )
  123. {
  124. ULONG cb;
  125. _fInitialized = TRUE;
  126. _cParameters = sizeof(_Parameters)/sizeof(_Parameters[0]);
  127. CTrkConfiguration::Initialize( );
  128. for( int i = 0; i <= MAX_TRKWKS_CONFIG; i++ )
  129. {
  130. Read( _Parameters[i].ptszName, &_Parameters[i].dwValue, _Parameters[i].dwDefault );
  131. TrkAssert( _Parameters[i].Index == i );
  132. }
  133. TrkAssert( MAX_TRKWKS_CONFIG + 1 == ELEMENTS(_Parameters) );
  134. if( !fPersistable )
  135. // Allow the base class to close it's registry key.
  136. CTrkWksConfiguration::UnInitialize();
  137. }
  138. //+----------------------------------------------------------------------------
  139. //
  140. // CTrkWksConfiguration::UnInitialize
  141. //
  142. // Uninit the base CTrkConfiguration class.
  143. //
  144. //+----------------------------------------------------------------------------
  145. VOID
  146. CTrkWksConfiguration::UnInitialize()
  147. {
  148. if( _fInitialized )
  149. {
  150. CTrkConfiguration::UnInitialize();
  151. _fInitialized = FALSE;
  152. }
  153. }