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.

335 lines
8.7 KiB

  1. // Copyright (c) Microsoft Corporation. All rights reserved.
  2. //+-------------------------------------------------------------------------
  3. //
  4. // Microsoft Windows
  5. // Copyright (c) Microsoft Corporation. All rights reserved.
  6. //
  7. // File: trksvr.idl
  8. //
  9. // Contents: RPC interface to Tracking (Workstation) Service.
  10. //
  11. // Classes:
  12. //
  13. // Functions:
  14. //
  15. // History:
  16. //
  17. //--------------------------------------------------------------------------
  18. import "trk.idl";
  19. //
  20. // Tracking (Server) Service data structures.
  21. //
  22. typedef signed long SequenceNumber;
  23. typedef struct
  24. {
  25. TCHAR tszFilePath[ 257 ]; // BUGBUG: Path size
  26. CDomainRelativeObjId droidBirth;
  27. CDomainRelativeObjId droidLast;
  28. HRESULT hr;
  29. } old_TRK_FILE_TRACKING_INFORMATION;
  30. typedef struct
  31. {
  32. CDomainRelativeObjId droidBirth;
  33. CDomainRelativeObjId droidLast;
  34. CMachineId mcidLast;
  35. HRESULT hr;
  36. } TRK_FILE_TRACKING_INFORMATION;
  37. typedef struct
  38. {
  39. [range(1,1)] ULONG cSearch;
  40. [size_is(cSearch)]
  41. old_TRK_FILE_TRACKING_INFORMATION *pSearches;
  42. } old_TRKSVR_CALL_SEARCH;
  43. typedef struct
  44. {
  45. [range(1,1)] ULONG cSearch;
  46. [size_is(cSearch)]
  47. TRK_FILE_TRACKING_INFORMATION *pSearches;
  48. } TRKSVR_CALL_SEARCH;
  49. typedef struct
  50. {
  51. [range(0,MOVE_BATCH_SIZE)]
  52. ULONG cNotifications;
  53. ULONG cProcessed;
  54. SequenceNumber seq;
  55. BOOL fForceSeqNumber;
  56. CVolumeId *pvolid;
  57. [size_is(cNotifications)]
  58. CObjId *rgobjidCurrent;
  59. [size_is(cNotifications)]
  60. CDomainRelativeObjId *rgdroidBirth;
  61. [size_is(cNotifications)]
  62. CDomainRelativeObjId *rgdroidNew;
  63. } TRKSVR_CALL_MOVE_NOTIFICATION;
  64. typedef struct
  65. {
  66. [range(0, REFRESH_OBJECT_BATCH_SIZE)]
  67. ULONG cSources;
  68. [size_is(cSources)]
  69. CDomainRelativeObjId *adroidBirth;
  70. [range(0,NUM_VOLUMES)]
  71. ULONG cVolumes;
  72. [size_is(cVolumes)]
  73. CVolumeId *avolid;
  74. } TRKSVR_CALL_REFRESH;
  75. typedef struct _DROID_LIST_ELEMENT
  76. {
  77. struct _DROID_LIST_ELEMENT * pNext;
  78. CDomainRelativeObjId droid;
  79. } DROID_LIST_ELEMENT;
  80. typedef struct
  81. {
  82. [range(0, MAX_DELETE_NOTIFICATIONS)]
  83. ULONG cdroidBirth;
  84. [size_is(cdroidBirth)]
  85. CDomainRelativeObjId * adroidBirth;
  86. [range(0, NUM_VOLUMES)]
  87. ULONG cVolumes;
  88. [size_is(cVolumes)]
  89. CVolumeId *pVolumes;
  90. } TRKSVR_CALL_DELETE;
  91. typedef [v1_enum] enum
  92. {
  93. CREATE_VOLUME, // S_OK or exception(disk full, out of memory)
  94. QUERY_VOLUME, // VOLUME_NOT_OWNED: volume found, but not owned by this client
  95. // VOLUME_NOT_FOUND: volume not found
  96. // VOLUME_OK: volume found, and owned by this client
  97. // exceptions: out of memory, disk failure etc
  98. CLAIM_VOLUME, // VOLUME_NOT_FOUND, volume not found
  99. // VOLUME_ACCESS_DENIED, volume found, secrets do not match
  100. // VOLUME_OK, volume found, secrets match
  101. // exceptions: out of memory, disk full, etc
  102. FIND_VOLUME, // VOLUME_NOT_FOUND, VOLUME_OK
  103. TEST_VOLUME, // S_OK
  104. DELETE_VOLUME
  105. } TRKSVR_SYNC_TYPE;
  106. typedef struct
  107. {
  108. HRESULT hr;
  109. TRKSVR_SYNC_TYPE SyncType; // CREATE QUERY CLAIM FIND TEST DELETE
  110. // ------ ----- ----- ---- ---- ------
  111. CVolumeId volume; // In In In In In In
  112. CVolumeSecret secret; // In - In - (In) -
  113. CVolumeSecret secretOld; // - - In - - -
  114. SequenceNumber seq; // In Out Out - In -
  115. FILETIME ftLastRefresh; // Out Out Out - - -
  116. CMachineId machine; // - - - Out (In) -
  117. } TRKSVR_SYNC_VOLUME;
  118. typedef struct
  119. {
  120. [range(0, NUM_VOLUMES)] ULONG cVolumes;
  121. [size_is(cVolumes)] TRKSVR_SYNC_VOLUME * pVolumes;
  122. } TRKSVR_CALL_SYNC_VOLUMES;
  123. typedef struct
  124. {
  125. // Request statistics
  126. ULONG cSyncVolumeRequests, cSyncVolumeErrors, cSyncVolumeThreads;
  127. ULONG cCreateVolumeRequests, cCreateVolumeErrors;
  128. ULONG cClaimVolumeRequests, cClaimVolumeErrors;
  129. ULONG cQueryVolumeRequests, cQueryVolumeErrors;
  130. ULONG cFindVolumeRequests, cFindVolumeErrors;
  131. ULONG cTestVolumeRequests, cTestVolumeErrors;
  132. ULONG cSearchRequests, cSearchErrors, cSearchThreads;
  133. ULONG cMoveNotifyRequests, cMoveNotifyErrors, cMoveNotifyThreads;
  134. ULONG cRefreshRequests, cRefreshErrors, cRefreshThreads;
  135. ULONG cDeleteNotifyRequests, cDeleteNotifyErrors, cDeleteNotifyThreads;
  136. //ULONG cMessageTypeErrors;
  137. ULONG ulGCIterationPeriod;
  138. FILETIME ftLastSuccessfulRequest;
  139. HRESULT hrLastError;
  140. // Quota statistics
  141. ULONG dwMoveLimit;
  142. LONG lRefreshCounter;
  143. ULONG dwCachedVolumeTableCount;
  144. ULONG dwCachedMoveTableCount;
  145. FILETIME ftCacheLastUpdated;
  146. BOOL fIsDesignatedDc;
  147. // Other
  148. FILETIME ftNextGC;
  149. FILETIME ftServiceStart;
  150. ULONG cMaxRpcThreads, cAvailableRpcThreads, cLowestAvailableRpcThreads;
  151. ULONG cNumThreadPoolThreads, cMostThreadPoolThreads;
  152. //ULONG Reserved;
  153. SHORT cEntriesToGC;
  154. SHORT cEntriesGCed;
  155. //ULONG SvcCtrlState;
  156. SHORT cMaxDsWriteEvents;
  157. SHORT cCurrentFailedWrites;
  158. struct
  159. {
  160. DWORD dwMajor;
  161. DWORD dwMinor;
  162. DWORD dwBuildNumber;
  163. } Version;
  164. } TRKSVR_STATISTICS;
  165. typedef struct
  166. {
  167. DWORD dwParameter;
  168. DWORD dwNewValue;
  169. } TRKWKS_CONFIG;
  170. typedef [v1_enum] enum
  171. {
  172. old_SEARCH,
  173. MOVE_NOTIFICATION,
  174. REFRESH,
  175. SYNC_VOLUMES,
  176. DELETE_NOTIFY,
  177. STATISTICS,
  178. SEARCH,
  179. // The following are hooks only used within the trkwks service
  180. // by LnkCallSvrMessage
  181. WKS_CONFIG,
  182. WKS_VOLUME_REFRESH
  183. } TRKSVR_MESSAGE_TYPE;
  184. typedef struct
  185. {
  186. TRKSVR_MESSAGE_TYPE MessageType;
  187. [switch_is(MessageType)] union
  188. {
  189. [case (old_SEARCH)]
  190. old_TRKSVR_CALL_SEARCH old_Search;
  191. [case (MOVE_NOTIFICATION)]
  192. TRKSVR_CALL_MOVE_NOTIFICATION MoveNotification;
  193. [case (REFRESH)]
  194. TRKSVR_CALL_REFRESH Refresh;
  195. [case (SYNC_VOLUMES)]
  196. TRKSVR_CALL_SYNC_VOLUMES SyncVolumes;
  197. [case (DELETE_NOTIFY)]
  198. TRKSVR_CALL_DELETE Delete;
  199. [case (SEARCH)]
  200. TRKSVR_CALL_SEARCH Search;
  201. };
  202. // Must be NULL unless security is disabled.
  203. [string] TCHAR *ptszMachineID;
  204. } TRKSVR_MESSAGE_UNION_OLD;
  205. typedef [v1_enum] enum
  206. {
  207. PRI_0=0, // highest
  208. PRI_1=1,
  209. PRI_2=2,
  210. PRI_3=3,
  211. PRI_4=4,
  212. PRI_5=5,
  213. PRI_6=6,
  214. PRI_7=7,
  215. PRI_8=8,
  216. PRI_9=9 // lowest
  217. } TRKSVR_MESSAGE_PRIORITY;
  218. typedef struct
  219. {
  220. TRKSVR_MESSAGE_TYPE MessageType;
  221. TRKSVR_MESSAGE_PRIORITY Priority;
  222. [switch_is(MessageType)] union
  223. {
  224. [case (old_SEARCH)]
  225. old_TRKSVR_CALL_SEARCH old_Search;
  226. [case (MOVE_NOTIFICATION)]
  227. TRKSVR_CALL_MOVE_NOTIFICATION MoveNotification;
  228. [case (REFRESH)]
  229. TRKSVR_CALL_REFRESH Refresh;
  230. [case (SYNC_VOLUMES)]
  231. TRKSVR_CALL_SYNC_VOLUMES SyncVolumes;
  232. [case (DELETE_NOTIFY)]
  233. TRKSVR_CALL_DELETE Delete;
  234. [case (STATISTICS)]
  235. TRKSVR_STATISTICS Statistics;
  236. [case (SEARCH)]
  237. TRKSVR_CALL_SEARCH Search;
  238. [case (WKS_CONFIG)]
  239. TRKWKS_CONFIG WksConfig;
  240. [case (WKS_VOLUME_REFRESH)]
  241. DWORD WksRefresh;
  242. };
  243. // Must be NULL unless security is disabled.
  244. [string] TCHAR *ptszMachineID;
  245. } TRKSVR_MESSAGE_UNION;
  246. // --------------------
  247. // Interface Attributes
  248. // --------------------
  249. [
  250. uuid(4da1c422-943d-11d1-acae-00c04fc2aa3f),
  251. version(1.0),
  252. pointer_default(unique)
  253. ]
  254. interface trksvr
  255. {
  256. //
  257. // Tracking (Server) Service API-s.
  258. //
  259. HRESULT LnkSvrMessage([in] handle_t IDL_handle, [in, out] TRKSVR_MESSAGE_UNION * pMsg );
  260. [callback] HRESULT LnkSvrMessageCallback( [in, out] TRKSVR_MESSAGE_UNION * pMsg );
  261. }