// Copyright (c) Microsoft Corporation. All rights reserved. //+------------------------------------------------------------------------- // // Microsoft Windows // Copyright (c) Microsoft Corporation. All rights reserved. // // File: trksvr.idl // // Contents: RPC interface to Tracking (Workstation) Service. // // Classes: // // Functions: // // History: // //-------------------------------------------------------------------------- import "trk.idl"; // // Tracking (Server) Service data structures. // typedef signed long SequenceNumber; typedef struct { TCHAR tszFilePath[ 257 ]; // BUGBUG: Path size CDomainRelativeObjId droidBirth; CDomainRelativeObjId droidLast; HRESULT hr; } old_TRK_FILE_TRACKING_INFORMATION; typedef struct { CDomainRelativeObjId droidBirth; CDomainRelativeObjId droidLast; CMachineId mcidLast; HRESULT hr; } TRK_FILE_TRACKING_INFORMATION; typedef struct { ULONG cSearch; [size_is(cSearch)] old_TRK_FILE_TRACKING_INFORMATION *pSearches; } old_TRKSVR_CALL_SEARCH; typedef struct { ULONG cSearch; [size_is(cSearch)] TRK_FILE_TRACKING_INFORMATION *pSearches; } TRKSVR_CALL_SEARCH; typedef struct { ULONG cNotifications; ULONG cProcessed; SequenceNumber seq; BOOL fForceSeqNumber; CVolumeId *pvolid; [size_is(cNotifications)] CObjId *rgobjidCurrent; [size_is(cNotifications)] CDomainRelativeObjId *rgdroidBirth; [size_is(cNotifications)] CDomainRelativeObjId *rgdroidNew; } TRKSVR_CALL_MOVE_NOTIFICATION; typedef struct { ULONG cSources; [size_is(cSources)] CDomainRelativeObjId *adroidBirth; ULONG cVolumes; [size_is(cVolumes)] CVolumeId *avolid; } TRKSVR_CALL_REFRESH; typedef struct _DROID_LIST_ELEMENT { struct _DROID_LIST_ELEMENT * pNext; CDomainRelativeObjId droid; } DROID_LIST_ELEMENT; typedef struct { ULONG cdroidBirth; [size_is(cdroidBirth)] CDomainRelativeObjId * adroidBirth; ULONG cVolumes; [size_is(cVolumes)] CVolumeId *pVolumes; } TRKSVR_CALL_DELETE; typedef [v1_enum] enum { CREATE_VOLUME, // S_OK or exception(disk full, out of memory) QUERY_VOLUME, // VOLUME_NOT_OWNED: volume found, but not owned by this client // VOLUME_NOT_FOUND: volume not found // VOLUME_OK: volume found, and owned by this client // exceptions: out of memory, disk failure etc CLAIM_VOLUME, // VOLUME_NOT_FOUND, volume not found // VOLUME_ACCESS_DENIED, volume found, secrets do not match // VOLUME_OK, volume found, secrets match // exceptions: out of memory, disk full, etc FIND_VOLUME, // VOLUME_NOT_FOUND, VOLUME_OK TEST_VOLUME, // S_OK DELETE_VOLUME } TRKSVR_SYNC_TYPE; typedef struct { HRESULT hr; TRKSVR_SYNC_TYPE SyncType; // CREATE QUERY CLAIM FIND TEST DELETE // ------ ----- ----- ---- ---- ------ CVolumeId volume; // In In In In In In CVolumeSecret secret; // In - In - (In) - CVolumeSecret secretOld; // - - In - - - SequenceNumber seq; // In Out Out - In - FILETIME ftLastRefresh; // Out Out Out - - - CMachineId machine; // - - - Out (In) - } TRKSVR_SYNC_VOLUME; typedef struct { ULONG cVolumes; [size_is(cVolumes)] TRKSVR_SYNC_VOLUME * pVolumes; #ifdef VOL_REPL FILETIME ftFirstChange; ULONG cChanges; [size_is( , cChanges)] VolumeMapEntry ** ppVolumeChanges; #endif } TRKSVR_CALL_SYNC_VOLUMES; typedef struct { // Request statistics ULONG cSyncVolumeRequests, cSyncVolumeErrors, cSyncVolumeThreads; ULONG cCreateVolumeRequests, cCreateVolumeErrors; ULONG cClaimVolumeRequests, cClaimVolumeErrors; ULONG cQueryVolumeRequests, cQueryVolumeErrors; ULONG cFindVolumeRequests, cFindVolumeErrors; ULONG cTestVolumeRequests, cTestVolumeErrors; ULONG cSearchRequests, cSearchErrors, cSearchThreads; ULONG cMoveNotifyRequests, cMoveNotifyErrors, cMoveNotifyThreads; ULONG cRefreshRequests, cRefreshErrors, cRefreshThreads; ULONG cDeleteNotifyRequests, cDeleteNotifyErrors, cDeleteNotifyThreads; //ULONG cMessageTypeErrors; ULONG ulGCIterationPeriod; FILETIME ftLastSuccessfulRequest; HRESULT hrLastError; // Quota statistics ULONG dwMoveLimit; LONG lRefreshCounter; ULONG dwCachedVolumeTableCount; ULONG dwCachedMoveTableCount; FILETIME ftCacheLastUpdated; BOOL fIsDesignatedDc; // Other FILETIME ftNextGC; FILETIME ftServiceStart; ULONG cMaxRpcThreads, cAvailableRpcThreads, cLowestAvailableRpcThreads; ULONG cNumThreadPoolThreads, cMostThreadPoolThreads; //ULONG Reserved; SHORT cEntriesToGC; SHORT cEntriesGCed; //ULONG SvcCtrlState; SHORT cMaxDsWriteEvents; SHORT cCurrentFailedWrites; struct { DWORD dwMajor; DWORD dwMinor; DWORD dwBuildNumber; } Version; } TRKSVR_STATISTICS; typedef struct { DWORD dwParameter; DWORD dwNewValue; } TRKWKS_CONFIG; typedef [v1_enum] enum { old_SEARCH, MOVE_NOTIFICATION, REFRESH, SYNC_VOLUMES, DELETE_NOTIFY, STATISTICS, SEARCH, // The following are hooks only used within the trkwks service // by LnkCallSvrMessage WKS_CONFIG, WKS_VOLUME_REFRESH } TRKSVR_MESSAGE_TYPE; typedef struct { TRKSVR_MESSAGE_TYPE MessageType; [switch_is(MessageType)] union { [case (old_SEARCH)] old_TRKSVR_CALL_SEARCH old_Search; [case (MOVE_NOTIFICATION)] TRKSVR_CALL_MOVE_NOTIFICATION MoveNotification; [case (REFRESH)] TRKSVR_CALL_REFRESH Refresh; [case (SYNC_VOLUMES)] TRKSVR_CALL_SYNC_VOLUMES SyncVolumes; [case (DELETE_NOTIFY)] TRKSVR_CALL_DELETE Delete; [case (SEARCH)] TRKSVR_CALL_SEARCH Search; }; // Must be NULL unless security is disabled. [string] TCHAR *ptszMachineID; } TRKSVR_MESSAGE_UNION_OLD; typedef [v1_enum] enum { PRI_0=0, // highest PRI_1=1, PRI_2=2, PRI_3=3, PRI_4=4, PRI_5=5, PRI_6=6, PRI_7=7, PRI_8=8, PRI_9=9 // lowest } TRKSVR_MESSAGE_PRIORITY; typedef struct { TRKSVR_MESSAGE_TYPE MessageType; TRKSVR_MESSAGE_PRIORITY Priority; [switch_is(MessageType)] union { [case (old_SEARCH)] old_TRKSVR_CALL_SEARCH old_Search; [case (MOVE_NOTIFICATION)] TRKSVR_CALL_MOVE_NOTIFICATION MoveNotification; [case (REFRESH)] TRKSVR_CALL_REFRESH Refresh; [case (SYNC_VOLUMES)] TRKSVR_CALL_SYNC_VOLUMES SyncVolumes; [case (DELETE_NOTIFY)] TRKSVR_CALL_DELETE Delete; [case (STATISTICS)] TRKSVR_STATISTICS Statistics; [case (SEARCH)] TRKSVR_CALL_SEARCH Search; [case (WKS_CONFIG)] TRKWKS_CONFIG WksConfig; [case (WKS_VOLUME_REFRESH)] DWORD WksRefresh; }; // Must be NULL unless security is disabled. [string] TCHAR *ptszMachineID; } TRKSVR_MESSAGE_UNION; // -------------------- // Interface Attributes // -------------------- [ uuid(4da1c422-943d-11d1-acae-00c04fc2aa3f), version(1.0), pointer_default(unique) ] interface trksvr { // // Tracking (Server) Service API-s. // HRESULT LnkSvrMessage([in] handle_t IDL_handle, [in, out] TRKSVR_MESSAGE_UNION * pMsg ); [callback] HRESULT LnkSvrMessageCallback( [in, out] TRKSVR_MESSAGE_UNION * pMsg ); }