| 1 | #include "idl_types.h"
 | 
|---|
| 2 | 
 | 
|---|
| 3 | import "misc.idl";
 | 
|---|
| 4 | 
 | 
|---|
| 5 | [
 | 
|---|
| 6 |   uuid("897e2e5f-93f3-4376-9c9c-fd2277495c27"),
 | 
|---|
| 7 |   version(1.0),
 | 
|---|
| 8 |   endpoint("ncacn_ip_tcp:", "ncalrpc:"),
 | 
|---|
| 9 |   helpstring("File Replication Service DFS-R"),
 | 
|---|
| 10 |   pointer_default(unique)
 | 
|---|
| 11 | ]
 | 
|---|
| 12 | interface frstrans
 | 
|---|
| 13 | {
 | 
|---|
| 14 |         /*****************/
 | 
|---|
| 15 |         /* Function 0x00 */
 | 
|---|
| 16 |         WERROR frstrans_CheckConnectivity(
 | 
|---|
| 17 |                 [in] GUID replica_set_guid,
 | 
|---|
| 18 |                 [in] GUID connection_guid
 | 
|---|
| 19 |         );
 | 
|---|
| 20 | 
 | 
|---|
| 21 |         /*****************/
 | 
|---|
| 22 |         /* Function 0x01 */
 | 
|---|
| 23 |         typedef [v1_enum,flag(NDR_PAHEX)] enum {
 | 
|---|
| 24 |                 FRSTRANS_PROTOCOL_VERSION_W2K3R2                = 0x00050000,
 | 
|---|
| 25 |                 FRSTRANS_PROTOCOL_VERSION_LONGHORN_SERVER       = 0x00050002
 | 
|---|
| 26 |         } frstrans_ProtocolVersion;
 | 
|---|
| 27 | 
 | 
|---|
| 28 |         typedef [bitmap32bit] bitmap {
 | 
|---|
| 29 |                 FRSTRANS_TRANSPORT_SUPPORTS_RDC_SIMILARITY      = 0x00000001
 | 
|---|
| 30 |         } frstrans_TransportFlags;
 | 
|---|
| 31 | 
 | 
|---|
| 32 |         WERROR frstrans_EstablishConnection(
 | 
|---|
| 33 |                 [in] GUID replica_set_guid,
 | 
|---|
| 34 |                 [in] GUID connection_guid,
 | 
|---|
| 35 |                 [in] frstrans_ProtocolVersion downstream_protocol_version,
 | 
|---|
| 36 |                 [in] frstrans_TransportFlags downstream_flags,
 | 
|---|
| 37 |                 [out,ref] frstrans_ProtocolVersion *upstream_protocol_version,
 | 
|---|
| 38 |                 [out,ref] frstrans_TransportFlags *upstream_flags
 | 
|---|
| 39 |         );
 | 
|---|
| 40 | 
 | 
|---|
| 41 |         /*****************/
 | 
|---|
| 42 |         /* Function 0x02 */
 | 
|---|
| 43 |         WERROR frstrans_EstablishSession(
 | 
|---|
| 44 |                 [in] GUID connection_guid,
 | 
|---|
| 45 |                 [in] GUID content_set_guid
 | 
|---|
| 46 |         );
 | 
|---|
| 47 | 
 | 
|---|
| 48 |         /*****************/
 | 
|---|
| 49 |         /* Function 0x03 */
 | 
|---|
| 50 |         typedef enum {
 | 
|---|
| 51 |                 FRSTRANS_UPDATE_REQUEST_ALL             = 0x0000,
 | 
|---|
| 52 |                 FRSTRANS_UPDATE_REQUEST_TOMBSTONES      = 0x0001,
 | 
|---|
| 53 |                 FRSTRANS_UPDATE_REQUEST_LIVE            = 0x0002
 | 
|---|
| 54 |         } frstrans_UpdateRequestType;
 | 
|---|
| 55 | 
 | 
|---|
| 56 |         typedef enum {
 | 
|---|
| 57 |                 FRSTRANS_UPDATE_STATUS_DONE             = 0x0002,
 | 
|---|
| 58 |                 FRSTRANS_UPDATE_STATUS_MORE             = 0x0003
 | 
|---|
| 59 |         } frstrans_UpdateStatus;
 | 
|---|
| 60 | 
 | 
|---|
| 61 |         typedef struct {
 | 
|---|
| 62 |                 GUID db_guid;
 | 
|---|
| 63 |                 hyper low;
 | 
|---|
| 64 |                 hyper high;
 | 
|---|
| 65 |         } frstrans_VersionVector;
 | 
|---|
| 66 | 
 | 
|---|
| 67 |         typedef [flag(NDR_PAHEX)] struct {
 | 
|---|
| 68 |                 boolean32 present;
 | 
|---|
| 69 |                 boolean32 name_conflict;
 | 
|---|
| 70 |                 uint32 attributes;
 | 
|---|
| 71 |                 NTTIME fence;
 | 
|---|
| 72 |                 NTTIME clock;
 | 
|---|
| 73 |                 NTTIME create_time;
 | 
|---|
| 74 |                 GUID content_set_guid;
 | 
|---|
| 75 |                 uint8 sha1_hash[20];
 | 
|---|
| 76 |                 uint8 rdc_similarity[16];
 | 
|---|
| 77 |                 GUID uid_db_guid;
 | 
|---|
| 78 |                 hyper uid_version;
 | 
|---|
| 79 |                 GUID gsvn_db_guid;
 | 
|---|
| 80 |                 hyper gsvn_version;
 | 
|---|
| 81 |                 GUID parent_db_guid;
 | 
|---|
| 82 |                 hyper parent_version;
 | 
|---|
| 83 |                 [string,charset(UTF16)] uint16 name[261];
 | 
|---|
| 84 |                 uint32 flags;
 | 
|---|
| 85 |         } frstrans_Update;
 | 
|---|
| 86 | 
 | 
|---|
| 87 |         WERROR frstrans_RequestUpdates(
 | 
|---|
| 88 |                 [in] GUID connection_guid,
 | 
|---|
| 89 |                 [in] GUID content_set_guid,
 | 
|---|
| 90 |                 [in,range(0,256)] uint32 credits_available,
 | 
|---|
| 91 |                 [in,range(0,1)] boolean32 hash_requested,
 | 
|---|
| 92 |                 [in,range(0,2)]
 | 
|---|
| 93 |                         frstrans_UpdateRequestType update_request_type,
 | 
|---|
| 94 |                 [in] uint32 version_vector_diff_count,
 | 
|---|
| 95 |                 [in,size_is(version_vector_diff_count)]
 | 
|---|
| 96 |                         frstrans_VersionVector *version_vector_diff,
 | 
|---|
| 97 |                 [out,ref,size_is(credits_available),length_is(*update_count)]
 | 
|---|
| 98 |                         frstrans_Update *frs_update,
 | 
|---|
| 99 |                 [out,ref] uint32 *update_count,
 | 
|---|
| 100 |                 [out,ref] frstrans_UpdateStatus *update_status,
 | 
|---|
| 101 |                 [out,ref] GUID *gvsn_db_guid,
 | 
|---|
| 102 |                 [out,ref] hyper *gvsn_version
 | 
|---|
| 103 |         );
 | 
|---|
| 104 | 
 | 
|---|
| 105 |         /*****************/
 | 
|---|
| 106 |         /* Function 0x04 */
 | 
|---|
| 107 |         typedef enum {
 | 
|---|
| 108 |                 FRSTRANS_VERSION_REQUEST_NORNAL_SYNC    = 0x0000,
 | 
|---|
| 109 |                 FRSTRANS_VERSION_REQUEST_SLOW_SYNC      = 0x0001,
 | 
|---|
| 110 |                 FRSTRANS_VERSION_REQUEST_SLAVE_SYNC     = 0x0002
 | 
|---|
| 111 |         } frstrans_VersionRequestType;
 | 
|---|
| 112 | 
 | 
|---|
| 113 |         typedef enum {
 | 
|---|
| 114 |                 FRSTRANS_VERSION_CHANGE_NOTIFY  = 0x0000,
 | 
|---|
| 115 |                 FRSTRANS_VERSION_CHANGE_ALL     = 0x0002
 | 
|---|
| 116 |         } frstrans_VersionChangeType;
 | 
|---|
| 117 | 
 | 
|---|
| 118 |         WERROR frstrans_RequestVersionVector(
 | 
|---|
| 119 |                 [in] uint32 sequence_number,
 | 
|---|
| 120 |                 [in] GUID connection_guid,
 | 
|---|
| 121 |                 [in] GUID content_set_guid,
 | 
|---|
| 122 |                 [in,range(0,2)] frstrans_VersionRequestType request_type,
 | 
|---|
| 123 |                 [in,range(0,2)] frstrans_VersionChangeType change_type,
 | 
|---|
| 124 |                 [in] hyper vv_generation
 | 
|---|
| 125 |         );
 | 
|---|
| 126 | 
 | 
|---|
| 127 |         /*****************/
 | 
|---|
| 128 |         /* Function 0x05 */
 | 
|---|
| 129 |         typedef struct {
 | 
|---|
| 130 |                 GUID machine_guid;
 | 
|---|
| 131 |                 uint32 year;
 | 
|---|
| 132 |                 uint32 month;
 | 
|---|
| 133 |                 uint32 day_of_week;
 | 
|---|
| 134 |                 uint32 day;
 | 
|---|
| 135 |                 uint32 hour;
 | 
|---|
| 136 |                 uint32 minute;
 | 
|---|
| 137 |                 uint32 second;
 | 
|---|
| 138 |                 uint32 milli_seconds;
 | 
|---|
| 139 |         } frstrans_EpoqueVector;
 | 
|---|
| 140 | 
 | 
|---|
| 141 |         typedef struct {
 | 
|---|
| 142 |                 hyper vv_generation;
 | 
|---|
| 143 |                 uint32 version_vector_count;
 | 
|---|
| 144 |                 [size_is(version_vector_count)]
 | 
|---|
| 145 |                         frstrans_VersionVector *version_vector;
 | 
|---|
| 146 |                 uint32 epoque_vector_count;
 | 
|---|
| 147 |                 [size_is(epoque_vector_count)]
 | 
|---|
| 148 |                         frstrans_EpoqueVector *epoque_vector;
 | 
|---|
| 149 |         } frstrans_AsyncVersionVectorResponse;
 | 
|---|
| 150 | 
 | 
|---|
| 151 |         typedef struct {
 | 
|---|
| 152 |                 uint32 sequence_number;
 | 
|---|
| 153 |                 WERROR status;
 | 
|---|
| 154 |                 frstrans_AsyncVersionVectorResponse response;
 | 
|---|
| 155 |         } frstrans_AsyncResponseContext;
 | 
|---|
| 156 | 
 | 
|---|
| 157 |         WERROR frstrans_AsyncPoll(
 | 
|---|
| 158 |                 [in] GUID connection_guid,
 | 
|---|
| 159 |                 [out,ref] frstrans_AsyncResponseContext *response
 | 
|---|
| 160 |         );
 | 
|---|
| 161 | 
 | 
|---|
| 162 |         /*****************/
 | 
|---|
| 163 |         /* Function 0x06 */
 | 
|---|
| 164 |         [todo] void FRSTRANS_REQUEST_RECORDS();
 | 
|---|
| 165 | 
 | 
|---|
| 166 |         /*****************/
 | 
|---|
| 167 |         /* Function 0x07 */
 | 
|---|
| 168 |         [todo] void FRSTRANS_UPDATE_CANCEL();
 | 
|---|
| 169 | 
 | 
|---|
| 170 |         /*****************/
 | 
|---|
| 171 |         /* Function 0x08 */
 | 
|---|
| 172 |         [todo] void FRSTRANS_RAW_GET_FILE_DATA();
 | 
|---|
| 173 | 
 | 
|---|
| 174 |         /*****************/
 | 
|---|
| 175 |         /* Function 0x09 */
 | 
|---|
| 176 |         [todo] void FRSTRANS_RDC_GET_SIGNATURES();
 | 
|---|
| 177 | 
 | 
|---|
| 178 |         /*****************/
 | 
|---|
| 179 |         /* Function 0x0a */
 | 
|---|
| 180 |         [todo] void FRSTRANS_RDC_PUSH_SOURCE_NEEDS();
 | 
|---|
| 181 | 
 | 
|---|
| 182 |         /*****************/
 | 
|---|
| 183 |         /* Function 0x0b */
 | 
|---|
| 184 |         [todo] void FRSTRANS_RDC_GET_FILE_DATA();
 | 
|---|
| 185 | 
 | 
|---|
| 186 |         /*****************/
 | 
|---|
| 187 |         /* Function 0x0c */
 | 
|---|
| 188 |         [todo] void FRSTRANS_RDC_CLOSE();
 | 
|---|
| 189 | 
 | 
|---|
| 190 |         /*****************/
 | 
|---|
| 191 |         /* Function 0x0d */
 | 
|---|
| 192 |         typedef enum {
 | 
|---|
| 193 |                 FRSTRANS_STAGING_POLICY_SERVER_DEFAULTY         = 0x0000,
 | 
|---|
| 194 |                 FRSTRANS_STAGING_POLICY_STATGING_REQUIRED       = 0x0001,
 | 
|---|
| 195 |                 FRSTRANS_STAGING_POLICY_RESTATGING_REQUIRED     = 0x0002
 | 
|---|
| 196 |         } frstrans_RequestedStagingPolicy;
 | 
|---|
| 197 | 
 | 
|---|
| 198 |         typedef enum {
 | 
|---|
| 199 |                 FRSTRANS_RDC_FILTER_GENERIC     = 0x0000,
 | 
|---|
| 200 |                 FRSTRANS_RDC_FILTER_MAX         = 0x0001,
 | 
|---|
| 201 |                 FRSTRANS_RDC_FILTER_POINT       = 0x0002,
 | 
|---|
| 202 |                 FRSTRANS_RDC_MAX_ALGORITHM      = 0x0003
 | 
|---|
| 203 |         } frstrans_RdcChunckerAlgorithm;
 | 
|---|
| 204 | 
 | 
|---|
| 205 |         typedef struct {
 | 
|---|
| 206 |                 frstrans_RdcChunckerAlgorithm chunker_type;
 | 
|---|
| 207 |                 uint8 chunker_parameters[64];
 | 
|---|
| 208 |         } frstrans_RdcParameterGeneric;
 | 
|---|
| 209 | 
 | 
|---|
| 210 |         typedef struct {
 | 
|---|
| 211 |                 [range(128,1024*16)] uint16 min_horizon_size;
 | 
|---|
| 212 |                 [range(2,96)] uint16 max_window_size;
 | 
|---|
| 213 |         } frstrans_RdcParameterFilterMax;
 | 
|---|
| 214 | 
 | 
|---|
| 215 |         typedef struct {
 | 
|---|
| 216 |                 uint16 min_chunk_size;
 | 
|---|
| 217 |                 uint16 max_chunk_size;
 | 
|---|
| 218 |         } frstrans_RdcParameterFilterPoint;
 | 
|---|
| 219 | 
 | 
|---|
| 220 |         typedef [switch_type(frstrans_RdcChunckerAlgorithm)] union {
 | 
|---|
| 221 |                 [case(FRSTRANS_RDC_FILTER_GENERIC)]
 | 
|---|
| 222 |                         frstrans_RdcParameterGeneric filter_generic;
 | 
|---|
| 223 |                 [case(FRSTRANS_RDC_FILTER_MAX)]
 | 
|---|
| 224 |                         frstrans_RdcParameterFilterMax filter_max;
 | 
|---|
| 225 |                 [case(FRSTRANS_RDC_FILTER_POINT)]
 | 
|---|
| 226 |                         frstrans_RdcParameterFilterPoint filter_point;
 | 
|---|
| 227 |         } frstrans_RdcParameterUnion;
 | 
|---|
| 228 | 
 | 
|---|
| 229 |         typedef struct {
 | 
|---|
| 230 |                 frstrans_RdcChunckerAlgorithm rdc_chunker_algorithm;
 | 
|---|
| 231 |                 [switch_is(rdc_chunker_algorithm)] frstrans_RdcParameterUnion u;
 | 
|---|
| 232 |         } frstrans_RdcParameters;
 | 
|---|
| 233 | 
 | 
|---|
| 234 |         typedef enum {
 | 
|---|
| 235 |                 FRSTRANS_RDC_VERSION            = 0x0001
 | 
|---|
| 236 |         } frstrans_RdcVersion;
 | 
|---|
| 237 | 
 | 
|---|
| 238 |         typedef enum {
 | 
|---|
| 239 |                 FRSTRANS_RDC_VERSION_COMPATIBLE = 0x0001
 | 
|---|
| 240 |         } frstrans_RdcVersionCompatible;
 | 
|---|
| 241 | 
 | 
|---|
| 242 |         typedef enum {
 | 
|---|
| 243 |                 FRSTRANS_RDC_UNCOMPRESSED       = 0x0000,
 | 
|---|
| 244 |                 FRSTRANS_RDC_XPRESS             = 0x0001
 | 
|---|
| 245 |         } frstrans_RdcCompressionAlgorithm;
 | 
|---|
| 246 | 
 | 
|---|
| 247 |         typedef struct {
 | 
|---|
| 248 |                 hyper on_disk_file_size;
 | 
|---|
| 249 |                 hyper file_size_estimate;
 | 
|---|
| 250 |                 frstrans_RdcVersion rdc_version;
 | 
|---|
| 251 |                 frstrans_RdcVersionCompatible rdc_minimum_compatible_version;
 | 
|---|
| 252 |                 [range(0,8)] uint8 rdc_signature_levels;
 | 
|---|
| 253 |                 frstrans_RdcCompressionAlgorithm compression_algorithm;
 | 
|---|
| 254 |                 [size_is(rdc_signature_levels)]
 | 
|---|
| 255 |                         frstrans_RdcParameters rdc_filter_parameters[*];
 | 
|---|
| 256 |         } frstrans_RdcFileInfo;
 | 
|---|
| 257 | 
 | 
|---|
| 258 |         WERROR frstrans_InitializeFileTransferAsync(
 | 
|---|
| 259 |                 [in] GUID connection_guid,
 | 
|---|
| 260 |                 [in,out,ref] frstrans_Update *frs_update,
 | 
|---|
| 261 |                 [in,range(0,1)] boolean32 rdc_desired,
 | 
|---|
| 262 |                 [in,out,ref] frstrans_RequestedStagingPolicy *staging_policy,
 | 
|---|
| 263 |                 [out,ref] policy_handle *server_context,
 | 
|---|
| 264 |                 [out,ref] frstrans_RdcFileInfo **rdc_file_info,
 | 
|---|
| 265 |                 [out,ref,size_is(buffer_size),length_is(*size_read)]
 | 
|---|
| 266 |                         uint8 *data_buffer,
 | 
|---|
| 267 |                 [in,range(0,262144)] uint32 buffer_size,
 | 
|---|
| 268 |                 [out,ref] uint32 *size_read,
 | 
|---|
| 269 |                 [out,ref] boolean32 *is_end_of_file
 | 
|---|
| 270 |         );
 | 
|---|
| 271 | 
 | 
|---|
| 272 |         /*****************/
 | 
|---|
| 273 |         /* Function 0x0e */
 | 
|---|
| 274 |         [todo] void FRSTRANS_OPNUM_0E_NOT_USED_ON_THE_WIRE();
 | 
|---|
| 275 | 
 | 
|---|
| 276 |         /* The following functions are new in Windows 2008 */
 | 
|---|
| 277 | 
 | 
|---|
| 278 |         /*****************/
 | 
|---|
| 279 |         /* Function 0x0f */
 | 
|---|
| 280 |         typedef pipe uint8 frstrans_BytePipe;
 | 
|---|
| 281 | 
 | 
|---|
| 282 |         WERROR frstrans_RawGetFileDataAsync(
 | 
|---|
| 283 |                 [in,ref] policy_handle *server_context,
 | 
|---|
| 284 |                 [out,ref] frstrans_BytePipe *byte_pipe
 | 
|---|
| 285 |                 );
 | 
|---|
| 286 | 
 | 
|---|
| 287 |         /*****************/
 | 
|---|
| 288 |         /* Function 0x10 */
 | 
|---|
| 289 |         WERROR frstrans_RdcGetFileDataAsync(
 | 
|---|
| 290 |                 [in,ref] policy_handle *server_context,
 | 
|---|
| 291 |                 [out,ref] frstrans_BytePipe *byte_pipe
 | 
|---|
| 292 |                 );
 | 
|---|
| 293 | }
 | 
|---|