1#include "idl_types.h" 2 3[ 4 uuid("e3514235-4b06-11d1-ab04-00c04fc2dcd2"), 5 version(4.0), 6 endpoint("ncacn_np:[\\pipe\\lsass]","ncacn_np:[\\pipe\\protected_storage]", "ncacn_ip_tcp:", "ncalrpc:"), 7 authservice("ldap"), 8 helpstring("Active Directory Replication"), 9 pointer_default(unique) 10] 11interface drsuapi 12{ 13 /*****************/ 14 /* Function 0x00 */ 15 typedef [bitmap32bit] bitmap { 16 DRSUAPI_SUPPORTED_EXTENSION_BASE = 0x00000001, 17 DRSUAPI_SUPPORTED_EXTENSION_ASYNC_REPLICATION = 0x00000002, 18 DRSUAPI_SUPPORTED_EXTENSION_REMOVEAPI = 0x00000004, 19 DRSUAPI_SUPPORTED_EXTENSION_MOVEREQ_V2 = 0x00000008, 20 DRSUAPI_SUPPORTED_EXTENSION_GETCHG_COMPRESS = 0x00000010, 21 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V1 = 0x00000020, 22 DRSUAPI_SUPPORTED_EXTENSION_RESTORE_USN_OPTIMIZATION = 0x00000040, 23 DRSUAPI_SUPPORTED_EXTENSION_00000080 = 0x00000080, 24 DRSUAPI_SUPPORTED_EXTENSION_KCC_EXECUTE = 0x00000100, 25 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRY_V2 = 0x00000200, 26 DRSUAPI_SUPPORTED_EXTENSION_LINKED_VALUE_REPLICATION = 0x00000400, 27 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V2 = 0x00000800, 28 DRSUAPI_SUPPORTED_EXTENSION_INSTANCE_TYPE_NOT_REQ_ON_MOD= 0x00001000, 29 DRSUAPI_SUPPORTED_EXTENSION_CRYPTO_BIND = 0x00002000, 30 DRSUAPI_SUPPORTED_EXTENSION_GET_REPL_INFO = 0x00004000, 31 DRSUAPI_SUPPORTED_EXTENSION_STRONG_ENCRYPTION = 0x00008000, 32 DRSUAPI_SUPPORTED_EXTENSION_DCINFO_V01 = 0x00010000, 33 DRSUAPI_SUPPORTED_EXTENSION_TRANSITIVE_MEMBERSHIP = 0x00020000, 34 DRSUAPI_SUPPORTED_EXTENSION_ADD_SID_HISTORY = 0x00040000, 35 DRSUAPI_SUPPORTED_EXTENSION_POST_BETA3 = 0x00080000, 36 DRSUAPI_SUPPORTED_EXTENSION_00100000 = 0x00100000, 37 DRSUAPI_SUPPORTED_EXTENSION_GET_MEMBERSHIPS2 = 0x00200000, 38 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V6 = 0x00400000, 39 DRSUAPI_SUPPORTED_EXTENSION_NONDOMAIN_NCS = 0x00800000, 40 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREQ_V8 = 0x01000000, 41 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V5 = 0x02000000, 42 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V6 = 0x04000000, 43 /* 44 * the following 3 have the same value 45 * repadmin.exe /bind says that 46 */ 47 DRSUAPI_SUPPORTED_EXTENSION_ADDENTRYREPLY_V3 = 0x08000000, 48 DRSUAPI_SUPPORTED_EXTENSION_GETCHGREPLY_V7 = 0x08000000, 49 DRSUAPI_SUPPORTED_EXTENSION_VERIFY_OBJECT = 0x08000000, 50 DRSUAPI_SUPPORTED_EXTENSION_XPRESS_COMPRESS = 0x10000000, 51 DRSUAPI_SUPPORTED_EXTENSION_20000000 = 0x20000000, 52 DRSUAPI_SUPPORTED_EXTENSION_40000000 = 0x40000000, 53 DRSUAPI_SUPPORTED_EXTENSION_80000000 = 0x80000000 54 } drsuapi_SupportedExtensions; 55 56 /* this is used by w2k */ 57 typedef struct { 58 drsuapi_SupportedExtensions supported_extensions; 59 GUID site_guid; 60 uint32 u1; 61 } drsuapi_DsBindInfo24; 62 63 /* this is used by w2k3 */ 64 typedef struct { 65 drsuapi_SupportedExtensions supported_extensions; 66 GUID site_guid; 67 uint32 u1; 68 uint32 repl_epoch; 69 } drsuapi_DsBindInfo28; 70 71# typedef struct { 72# [flag(NDR_REMAINING)] DATA_BLOB info; 73# } drsuapi_DsBindInfoFallBack; 74 75 typedef union { 76 [case(24)] drsuapi_DsBindInfo24 info24; 77 [case(28)] drsuapi_DsBindInfo28 info28; 78# [default][subcontext(4)] drsuapi_DsBindInfoFallBack FallBack; 79 } drsuapi_DsBindInfo; 80 81 /* the drsuapi_DsBindInfoCtr was this before 82 * typedef [flag(NDR_PAHEX)] struct { 83 * [range(1,10000)] uint32 length; 84 * [size_is(length)] uint8 data[]; 85 * } drsuapi_DsBindInfo; 86 * 87 * but we don't want the caller to manually decode this blob, 88 * so we're doing it here 89 */ 90 91 typedef struct { 92 [range(1,10000)] uint32 length; 93 [switch_is(length)] drsuapi_DsBindInfo info; 94 } drsuapi_DsBindInfoCtr; 95 96 /* this is a magic guid you need to pass to DsBind to make drsuapi_DsWriteAccountSpn() work 97 * 98 * maybe the bind_guid could also be the invocation_id see drsuapi_DsReplicaConnection04 99 */ 100# const string DRSUAPI_DS_BIND_GUID = "e24d201a-4fd6-11d1-a3da-0000f875ae0d"; 101 102 WERROR drsuapi_DsBind( 103 [in] GUID *bind_guid, 104 [in,out] drsuapi_DsBindInfoCtr *bind_info, 105 [out,ref] policy_handle *bind_handle 106 ); 107 108 /*****************/ 109 /* Function 0x01 */ 110 WERROR drsuapi_DsUnbind( 111 [in,out,ref] policy_handle *bind_handle 112 ); 113 114 /*****************/ 115 /* Function 0x02 */ 116 typedef struct { 117 uint32 unknown1; 118 uint32 unknown2; 119 GUID guid1; 120 uint8 byte_array[28]; 121 uint32 str_len; 122 [size_is(str_len+1)] uint32 nc_dn[]; 123 } drsuapi_DsReplicaSyncRequest1Info; 124 125 typedef bitmap { 126 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_OPERATION = 0x00000001, 127 DRSUAPI_DS_REPLICA_SYNC_WRITEABLE = 0x00000002, 128 DRSUAPI_DS_REPLICA_SYNC_PERIODIC = 0x00000004, 129 DRSUAPI_DS_REPLICA_SYNC_INTERSITE_MESSAGING = 0x00000008, 130 DRSUAPI_DS_REPLICA_SYNC_ALL_SOURCES = 0x00000010, 131 DRSUAPI_DS_REPLICA_SYNC_FULL = 0x00000020, 132 DRSUAPI_DS_REPLICA_SYNC_URGENT = 0x00000040, 133 DRSUAPI_DS_REPLICA_SYNC_NO_DISCARD = 0x00000080, 134 DRSUAPI_DS_REPLICA_SYNC_FORCE = 0x00000100, 135 DRSUAPI_DS_REPLICA_SYNC_ADD_REFERENCE = 0x00000200, 136 DRSUAPI_DS_REPLICA_SYNC_NEVER_COMPLETED = 0x00000400, 137 DRSUAPI_DS_REPLICA_SYNC_TWO_WAY = 0x00000800, 138 DRSUAPI_DS_REPLICA_SYNC_NEVER_NOTIFY = 0x00001000, 139 DRSUAPI_DS_REPLICA_SYNC_INITIAL = 0x00002000, 140 DRSUAPI_DS_REPLICA_SYNC_USE_COMPRESSION = 0x00004000, 141 DRSUAPI_DS_REPLICA_SYNC_ABANDONED = 0x00008000, 142 DRSUAPI_DS_REPLICA_SYNC_INITIAL_IN_PROGRESS = 0x00010000, 143 DRSUAPI_DS_REPLICA_SYNC_PARTIAL_ATTRIBUTE_SET = 0x00020000, 144 DRSUAPI_DS_REPLICA_SYNC_REQUEUE = 0x00040000, 145 DRSUAPI_DS_REPLICA_SYNC_NOTIFICATION = 0x00080000, 146 DRSUAPI_DS_REPLICA_SYNC_ASYNCHRONOUS_REPLICA = 0x00100000, 147 DRSUAPI_DS_REPLICA_SYNC_CRITICAL = 0x00200000, 148 DRSUAPI_DS_REPLICA_SYNC_FULL_IN_PROGRESS = 0x00400000, 149 DRSUAPI_DS_REPLICA_SYNC_PREEMPTED = 0x00800000 150 } drsuapi_DsReplicaSyncOptions; 151 152 typedef struct { 153 [ref] drsuapi_DsReplicaSyncRequest1Info *info; 154 GUID guid1; 155 a_string *string1; 156 drsuapi_DsReplicaSyncOptions options; 157 } drsuapi_DsReplicaSyncRequest1; 158 159 typedef [switch_type(int32)] union { 160 [case(1)] drsuapi_DsReplicaSyncRequest1 req1; 161 } drsuapi_DsReplicaSyncRequest; 162 163 WERROR drsuapi_DsReplicaSync( 164 [in,ref] policy_handle *bind_handle, 165 [in] int32 level, 166 [in,switch_is(level),ref] drsuapi_DsReplicaSyncRequest *req 167 ); 168 169 /*****************/ 170 /* Function 0x03 */ 171 typedef struct { 172 hyper usn1; 173 hyper usn2; 174 hyper usn3; 175 } drsuapi_DsGetNCChangesUsnTriple; 176 177 typedef struct { 178 GUID source_dsa_invocation_id; 179 hyper highest_usn; 180 } drsuapi_DsReplicaCoursor; 181 182 typedef struct { 183 uint32 u1; 184 uint32 u2; 185 [range(0,0x100000)] uint32 count; 186 uint32 u3; 187 [size_is(count)] drsuapi_DsReplicaCoursor array[]; 188 } drsuapi_DsReplicaCoursor05Ctr; 189 190 typedef struct { 191 GUID guid1; 192 GUID guid2; 193 [ref] drsuapi_DsReplicaSyncRequest1Info *sync_req_info1; 194 drsuapi_DsGetNCChangesUsnTriple usn1; 195 drsuapi_DsReplicaCoursor05Ctr *coursor; 196 uint32 unknown1; 197 uint32 unknown2; 198 uint32 unknown3; 199 uint32 unknown4; 200 hyper h1; 201 } drsuapi_DsGetNCChangesRequest5; 202 203 typedef [flag(NDR_PAHEX)] struct { 204 [range(0,10000)] uint32 length; 205 [size_is(length)] uint8 *byte_array[]; 206 } drsuapi_DsGetNCChangesRequest_Ctr14; 207 208 typedef struct { 209 uint32 unknown1; 210 drsuapi_DsGetNCChangesRequest_Ctr14 data; 211 } drsuapi_DsGetNCChangesRequest_Ctr13; 212 213 typedef struct { 214 [range(0,0x100000)] uint32 count; 215 [size_is(count)] drsuapi_DsGetNCChangesRequest_Ctr13 *array[]; 216 } drsuapi_DsGetNCChangesRequest_Ctr12; 217 218 typedef struct { 219 GUID guid1; 220 GUID guid2; 221 [ref] drsuapi_DsReplicaSyncRequest1Info *sync_req_info1; 222 drsuapi_DsGetNCChangesUsnTriple usn1; 223 drsuapi_DsReplicaCoursor05Ctr *coursor; 224 uint32 unknown1; 225 uint32 unknown2; 226 uint32 unknown3; 227 uint32 unknown4; 228 hyper h1; 229 uint32 unique_ptr1; 230 uint32 unique_ptr2; 231 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12; 232 } drsuapi_DsGetNCChangesRequest8; 233 234 typedef [switch_type(int32)] union { 235 [case(5)] drsuapi_DsGetNCChangesRequest5 req5; 236 [case(8)] drsuapi_DsGetNCChangesRequest8 req8; 237 } drsuapi_DsGetNCChangesRequest; 238 239 typedef struct { 240 drsuapi_DsReplicaCoursor coursor; 241 NTTIME_1sec time1; 242 } drsuapi_DsReplicaCoursorEx; 243 244 typedef struct { 245 uint32 u1; 246 uint32 u2; 247 [range(0,0x100000)] uint32 count; 248 uint32 u3; 249 [size_is(count)] drsuapi_DsReplicaCoursorEx array[]; 250 } drsuapi_DsReplicaCoursorEx05Ctr; 251 252 typedef struct { 253 GUID guid1; 254 GUID guid2; 255 drsuapi_DsReplicaSyncRequest1Info *sync_req_info1; 256 drsuapi_DsGetNCChangesUsnTriple usn1; 257 drsuapi_DsGetNCChangesUsnTriple usn2; 258 drsuapi_DsReplicaCoursorEx05Ctr *coursor_ex; 259 drsuapi_DsGetNCChangesRequest_Ctr12 ctr12; 260 uint32 u1[3]; 261 uint32 ptr1; 262 uint32 u2[3]; 263 uint32 len1; 264 uint32 array_ptr1; 265 uint32 u3; 266 } drsuapi_DsGetNCChangesCtr6; 267 268 typedef struct { 269 } drsuapi_DsGetNCChangesCtr7; 270 271 typedef [switch_type(int32)] union { 272 [case(6)] drsuapi_DsGetNCChangesCtr6 ctr6; 273 [case(7)] drsuapi_DsGetNCChangesCtr7 ctr7; 274 } drsuapi_DsGetNCChangesCtr; 275 276 WERROR drsuapi_DsGetNCChanges( 277 [in,ref] policy_handle *bind_handle, 278 [in,out] int32 level, 279 [in,switch_is(level)] drsuapi_DsGetNCChangesRequest req, 280 [out,switch_is(level)] drsuapi_DsGetNCChangesCtr ctr 281 ); 282 283 /*****************/ 284 /* Function 0x04 */ 285 typedef bitmap { 286 DRSUAPI_DS_REPLICA_UPDATE_ASYNCHRONOUS_OPERATION = 0x00000001, 287 DRSUAPI_DS_REPLICA_UPDATE_WRITEABLE = 0x00000002, 288 DRSUAPI_DS_REPLICA_UPDATE_ADD_REFERENCE = 0x00000004, 289 DRSUAPI_DS_REPLICA_UPDATE_DELETE_REFERENCE = 0x00000008, 290 DRSUAPI_DS_REPLICA_UPDATE_0x00000010 = 0x00000010 291 } drsuapi_DsReplicaUpdateRefsOptions; 292 293 typedef struct { 294 uint32 unknown1; 295 uint32 unknown2; 296 GUID dest_dsa_guid; 297 drsuapi_DsReplicaUpdateRefsOptions options; 298 drsuapi_DsReplicaSyncRequest1Info sync_req_info1; 299 ascstr dest_dsa_dns_name; 300 } drsuapi_DsReplicaUpdateRefsRequest1; 301 302 typedef [switch_type(int32)] union { 303 [case(1)] drsuapi_DsReplicaUpdateRefsRequest1 req1; 304 } drsuapi_DsReplicaUpdateRefsRequest; 305 306 WERROR drsuapi_DsReplicaUpdateRefs( 307 [in,ref] policy_handle *bind_handle, 308 [in] int32 level, 309 [in,switch_is(level)] drsuapi_DsReplicaUpdateRefsRequest req 310 ); 311 312 /*****************/ 313 /* Function 0x05 */ 314 typedef bitmap { 315 DRSUAPI_DS_REPLICA_ADD_ASYNCHRONOUS_OPERATION = 0x00000001, 316 DRSUAPI_DS_REPLICA_ADD_WRITEABLE = 0x00000002 317 /* TODO ... */ 318 } drsuapi_DsReplicaAddOptions; 319 320 WERROR DRSUAPI_REPLICA_ADD(); 321 322 /*****************/ 323 /* Function 0x06 */ 324 typedef bitmap { 325 DRSUAPI_DS_REPLICA_DELETE_ASYNCHRONOUS_OPERATION = 0x00000001, 326 DRSUAPI_DS_REPLICA_DELETE_WRITEABLE = 0x00000002 327 /* TODO ... */ 328 } drsuapi_DsReplicaDeleteOptions; 329 330 WERROR DRSUAPI_REPLICA_DEL(); 331 332 /*****************/ 333 /* Function 0x07 */ 334 typedef bitmap { 335 DRSUAPI_DS_REPLICA_MODIFY_ASYNCHRONOUS_OPERATION = 0x00000001, 336 DRSUAPI_DS_REPLICA_MODIFY_WRITEABLE = 0x00000002 337 } drsuapi_DsReplicaModifyOptions; 338 339 WERROR DRSUAPI_REPLICA_MODIFY(); 340 341 /*****************/ 342 /* Function 0x08 */ 343 WERROR DRSUAPI_VERIFY_NAMES(); 344 345 /*****************/ 346 /* Function 0x09 */ 347 WERROR DRSUAPI_GET_MEMBERSHIPS(); 348 349 /*****************/ 350 /* Function 0x0a */ 351 WERROR DRSUAPI_INTER_DOMAIN_MOVE(); 352 353 /*****************/ 354 /* Function 0x0b */ 355 WERROR DRSUAPI_GET_NT4_CHANGELOG(); 356 357 /*****************/ 358 /* Function 0x0c */ 359 typedef [v1_enum] enum { 360 DRSUAPI_DS_NAME_STATUS_OK = 0, 361 DRSUAPI_DS_NAME_STATUS_RESOLVE_ERROR = 1, 362 DRSUAPI_DS_NAME_STATUS_NOT_FOUND = 2, 363 DRSUAPI_DS_NAME_STATUS_NOT_UNIQUE = 3, 364 DRSUAPI_DS_NAME_STATUS_NO_MAPPING = 4, 365 DRSUAPI_DS_NAME_STATUS_DOMAIN_ONLY = 5, 366 DRSUAPI_DS_NAME_STATUS_NO_SYNTACTICAL_MAPPING = 6, 367 DRSUAPI_DS_NAME_STATUS_TRUST_REFERRAL = 7 368 } drsuapi_DsNameStatus; 369 370 typedef [v1_enum] enum { 371 DRSUAPI_DS_NAME_FLAG_NO_FLAGS = 0x0, 372 DRSUAPI_DS_NAME_FLAG_SYNTACTICAL_ONLY = 0x1, 373 DRSUAPI_DS_NAME_FLAG_EVAL_AT_DC = 0x2, 374 DRSUAPI_DS_NAME_FLAG_GCVERIFY = 0x4, 375 DRSUAPI_DS_NAME_FLAG_TRUST_REFERRAL = 0x8 376 } drsuapi_DsNameFlags; 377 378 typedef [v1_enum] enum { 379 DRSUAPI_DS_NAME_FORMAT_UNKNOWN = 0, 380 DRSUAPI_DS_NAME_FORMAT_FQDN_1779 = 1, 381 DRSUAPI_DS_NAME_FORMAT_NT4_ACCOUNT = 2, 382 DRSUAPI_DS_NAME_FORMAT_DISPLAY = 3, 383 DRSUAPI_DS_NAME_FORMAT_GUID = 6, 384 DRSUAPI_DS_NAME_FORMAT_CANONICAL = 7, 385 DRSUAPI_DS_NAME_FORMAT_USER_PRINCIPAL = 8, 386 DRSUAPI_DS_NAME_FORMAT_CANONICAL_EX = 9, 387 DRSUAPI_DS_NAME_FORMAT_SERVICE_PRINCIPAL = 10, 388 DRSUAPI_DS_NAME_FORMAT_SID_OR_SID_HISTORY = 11, 389 DRSUAPI_DS_NAME_FORMAT_DNS_DOMAIN = 12 390 } drsuapi_DsNameFormat; 391 392 typedef struct { 393 unistr *str; 394 } drsuapi_DsNameString; 395 396 typedef struct { 397 uint32 unknown1; /* 0x000004e4 */ 398 uint32 unknown2; /* 0x00000407 */ 399 drsuapi_DsNameFlags format_flags; 400 drsuapi_DsNameFormat format_offered; 401 drsuapi_DsNameFormat format_desired; 402 [range(1,10000)] uint32 count; 403 [size_is(count)] drsuapi_DsNameString *names[]; 404 } drsuapi_DsNameRequest1; 405 406 typedef [switch_type(int32)] union { 407 [case(1)] drsuapi_DsNameRequest1 req1; 408 } drsuapi_DsNameRequest; 409 410 typedef struct { 411 drsuapi_DsNameStatus status; 412 unistr *dns_domain_name; 413 unistr *result_name; 414 } drsuapi_DsNameInfo1; 415 416 typedef struct { 417 uint32 count; 418 [size_is(count)] drsuapi_DsNameInfo1 *array[]; 419 } drsuapi_DsNameCtr1; 420 421 typedef [switch_type(int32)] union { 422 [case(1)] drsuapi_DsNameCtr1 *ctr1; 423 } drsuapi_DsNameCtr; 424 425 WERROR drsuapi_DsCrackNames( 426 [in,ref] policy_handle *bind_handle, 427 [in, out] int32 level, 428 [in,switch_is(level)] drsuapi_DsNameRequest req, 429 [out,switch_is(level)] drsuapi_DsNameCtr ctr 430 ); 431 432 /*****************/ 433 /* Function 0x0d */ 434 typedef [v1_enum] enum { 435 DRSUAPI_DS_SPN_OPERATION_ADD = 0, 436 DRSUAPI_DS_SPN_OPERATION_REPLACE= 1, 437 DRSUAPI_DS_SPN_OPERATION_DELETE = 2 438 } drsuapi_DsSpnOperation; 439 440 typedef struct { 441 drsuapi_DsSpnOperation operation; 442 uint32 unknown1; 443 unistr *object_dn; 444 [range(0,10000)] uint32 count; 445 [size_is(count)] drsuapi_DsNameString *spn_names[]; 446 } drsuapi_DsWriteAccountSpnRequest1; 447 448 typedef [switch_type(int32)] union { 449 [case(1)] drsuapi_DsWriteAccountSpnRequest1 req1; 450 } drsuapi_DsWriteAccountSpnRequest; 451 452 typedef struct { 453 WERROR status; 454 } drsuapi_DsWriteAccountSpnResult1; 455 456 typedef [switch_type(int32)] union { 457 [case(1)] drsuapi_DsWriteAccountSpnResult1 res1; 458 } drsuapi_DsWriteAccountSpnResult; 459 460 WERROR drsuapi_DsWriteAccountSpn( 461 [in,ref] policy_handle *bind_handle, 462 [in, out] int32 level, 463 [in,switch_is(level)] drsuapi_DsWriteAccountSpnRequest req, 464 [out,switch_is(level)] drsuapi_DsWriteAccountSpnResult res 465 ); 466 467 /*****************/ 468 /* Function 0x0e */ 469 WERROR DRSUAPI_REMOVE_DS_SERVER(); 470 471 /*****************/ 472 /* Function 0x0f */ 473 WERROR DRSUAPI_REMOVE_DS_DOMAIN(); 474 475 /*****************/ 476 /* Function 0x10 */ 477 typedef struct { 478 unistr *domain_name; /* netbios or dns */ 479 int32 level; /* specifies the switch level for the request */ 480 } drsuapi_DsGetDCInfoRequest1; 481 482 typedef [switch_type(int32)] union { 483 [case(1)] drsuapi_DsGetDCInfoRequest1 req1; 484 } drsuapi_DsGetDCInfoRequest; 485 486 typedef struct { 487 unistr *netbios_name; 488 unistr *dns_name; 489 unistr *site_name; 490 unistr *computer_dn; 491 unistr *server_dn; 492 uint32 is_pdc; 493 uint32 is_enabled; 494 } drsuapi_DsGetDCInfo1; 495 496 typedef struct { 497 [range(0,10000)] uint32 count; 498 [size_is(count)] drsuapi_DsGetDCInfo1 *array[]; 499 } drsuapi_DsGetDCInfoCtr1; 500 501 typedef struct { 502 unistr *netbios_name; 503 unistr *dns_name; 504 unistr *site_name; 505 unistr *site_dn; 506 unistr *computer_dn; 507 unistr *server_dn; 508 unistr *ntds_dn; 509 uint32 is_pdc; 510 uint32 is_enabled; 511 uint32 is_gc; 512 GUID site_guid; 513 GUID computer_guid; 514 GUID server_guid; 515 GUID ntds_guid; 516 } drsuapi_DsGetDCInfo2; 517 518 typedef struct { 519 [range(0,10000)] uint32 count; 520 [size_is(count)] drsuapi_DsGetDCInfo2 *array[]; 521 } drsuapi_DsGetDCInfoCtr2; 522 523 typedef struct { 524 uint32 unknown1; 525 uint32 unknown2; 526 uint32 unknown3; 527 uint32 unknown4; 528 uint32 unknown5; 529 uint32 unknown6; 530 unistr *server_nt4_account; 531 } drsuapi_DsGetDCInfo01; 532 533 typedef struct { 534 [range(0,10000)] uint32 count; 535 [size_is(count)] drsuapi_DsGetDCInfo01 *array[]; 536 } drsuapi_DsGetDCInfoCtr01; 537 538 typedef [v1_enum] enum { 539 DRSUAPI_DC_INFO_CTR_1 = 1, 540 DRSUAPI_DC_INFO_CTR_2 = 2, 541 DRSUAPI_DC_INFO_CTR_01 = -1, 542 } drsuapi_DsGetDCInfoCtrLevels; 543 544 typedef [switch_type(int32)] union { 545 [case(DRSUAPI_DC_INFO_CTR_1)] drsuapi_DsGetDCInfoCtr1 ctr1; 546 [case(DRSUAPI_DC_INFO_CTR_2)] drsuapi_DsGetDCInfoCtr2 ctr2; 547 [case(DRSUAPI_DC_INFO_CTR_01)] drsuapi_DsGetDCInfoCtr01 ctr01; 548 } drsuapi_DsGetDCInfoCtr; 549 550 WERROR drsuapi_DsGetDomainControllerInfo( 551 [in,ref] policy_handle *bind_handle, 552 [in, out] int32 level, 553 [in,switch_is(level)] drsuapi_DsGetDCInfoRequest req, 554 [out,switch_is(level)] drsuapi_DsGetDCInfoCtr ctr 555 ); 556 557 /*****************/ 558 /* Function 0x11 */ 559 WERROR drsuapi_DsAddEntry(); 560 561 /*****************/ 562 /* Function 0x12 */ 563 WERROR DRSUAPI_EXECUTE_KCC(); 564 565 /*****************/ 566 /* Function 0x13 */ 567 typedef [v1_enum] enum { 568 DRSUAPI_DS_REPLICA_GET_INFO = 1, 569 DRSUAPI_DS_REPLICA_GET_INFO2 = 2 570 } drsuapi_DsReplicaGetInfoLevel; 571 572 typedef [v1_enum] enum { 573 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS = 0, 574 DRSUAPI_DS_REPLICA_INFO_CURSORS = 1, 575 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA = 2, 576 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES = 3, 577 DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES = 4, 578 DRSUAPI_DS_REPLICA_INFO_PENDING_OPS = 5, 579 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA = 6, 580 DRSUAPI_DS_REPLICA_INFO_CURSORS2 = 7, 581 DRSUAPI_DS_REPLICA_INFO_CURSORS3 = 8, 582 DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2 = 9, 583 DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2 = 10, 584 DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02 = -2, 585 DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04 = -4, 586 DRSUAPI_DS_REPLICA_INFO_CURSURS05 = -5, 587 DRSUAPI_DS_REPLICA_INFO_06 = -6 588 } drsuapi_DsReplicaInfoType; 589 590 typedef struct { 591 drsuapi_DsReplicaInfoType info_type; 592 unistr *object_dn; 593 GUID guid1; 594 } drsuapi_DsReplicaGetInfoRequest1; 595 596 typedef struct { 597 drsuapi_DsReplicaInfoType info_type; 598 unistr *object_dn; 599 GUID guid1; 600 uint32 unknown1; 601 unistr *string1; 602 unistr *string2; 603 uint32 unknown2; 604 } drsuapi_DsReplicaGetInfoRequest2; 605 606 typedef [switch_type(drsuapi_DsReplicaGetInfoLevel)] union { 607 [case(DRSUAPI_DS_REPLICA_GET_INFO)] drsuapi_DsReplicaGetInfoRequest1 req1; 608 [case(DRSUAPI_DS_REPLICA_GET_INFO2)] drsuapi_DsReplicaGetInfoRequest2 req2; 609 } drsuapi_DsReplicaGetInfoRequest; 610 611 typedef struct { 612 unistr *naming_context_dn; 613 unistr *source_dsa_obj_dn; 614 unistr *source_dsa_address; 615 unistr *transport_obj_dn; 616 uint32 replica_flags; 617 uint32 reserved; 618 GUID naming_context_obj_guid; 619 GUID source_dsa_obj_guid; 620 GUID source_dsa_invocation_id; 621 GUID transport_obj_guid; 622 hyper tmp_highest_usn; 623 hyper highest_usn; 624 NTTIME last_success; 625 NTTIME last_attempt; 626 WERROR result_last_attempt; 627 uint32 consecutive_sync_failures; 628 } drsuapi_DsReplicaNeighbour; 629 630 typedef struct { 631 uint32 count; 632 uint32 reserved; 633 [size_is(count)] drsuapi_DsReplicaNeighbour array[]; 634 } drsuapi_DsReplicaNeighbourCtr; 635 636 typedef struct { 637 uint32 count; 638 uint32 reserved; 639 [size_is(count)] drsuapi_DsReplicaCoursor array[]; 640 } drsuapi_DsReplicaCoursorCtr; 641 642 typedef struct { 643 unistr *attribute_name; 644 uint32 version; 645 NTTIME originating_last_changed; 646 GUID originating_dsa_invocation_id; 647 hyper originating_usn; 648 hyper local_usn; 649 } drsuapi_DsReplicaObjMetaData; 650 651 typedef struct { 652 uint32 count; 653 uint32 reserved; 654 [size_is(count)] drsuapi_DsReplicaObjMetaData array[]; 655 } drsuapi_DsReplicaObjMetaDataCtr; 656 657 typedef struct { 658 unistr *dsa_obj_dn; 659 GUID dsa_obj_guid; 660 NTTIME first_failure; 661 uint32 num_failures; 662 WERROR last_result; 663 } drsuapi_DsReplicaKccDsaFailure; 664 665 typedef struct { 666 uint32 count; 667 uint32 reserved; 668 [size_is(count)] drsuapi_DsReplicaKccDsaFailure array[]; 669 } drsuapi_DsReplicaKccDsaFailuresCtr; 670 671 typedef enum { 672 DRSUAPI_DS_REPLICA_OP_TYPE_SYNC = 0, 673 DRSUAPI_DS_REPLICA_OP_TYPE_ADD = 1, 674 DRSUAPI_DS_REPLICA_OP_TYPE_DELETE = 2, 675 DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY = 3, 676 DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS = 4 677 } drsuapi_DsReplicaOpType; 678 679 typedef [switch_type(drsuapi_DsReplicaOpType)] union { 680 [case(DRSUAPI_DS_REPLICA_OP_TYPE_SYNC)] drsuapi_DsReplicaSyncOptions sync; 681 [case(DRSUAPI_DS_REPLICA_OP_TYPE_ADD)] drsuapi_DsReplicaAddOptions add; 682 [case(DRSUAPI_DS_REPLICA_OP_TYPE_DELETE)] drsuapi_DsReplicaDeleteOptions delete; 683 [case(DRSUAPI_DS_REPLICA_OP_TYPE_MODIFY)] drsuapi_DsReplicaModifyOptions modify; 684 [case(DRSUAPI_DS_REPLICA_OP_TYPE_UPDATE_REFS)] drsuapi_DsReplicaUpdateRefsOptions update_refs; 685 [default] uint32 unknown; 686 } drsuapi_DsRplicaOpOptions; 687 688 typedef struct { 689 NTTIME operation_start; 690 uint32 serial_num; /* unique till reboot */ 691 uint32 priority; 692 drsuapi_DsReplicaOpType operation_type; 693 [switch_is(operation_type)] drsuapi_DsRplicaOpOptions options; 694 unistr *nc_dn; 695 unistr *remote_dsa_obj_dn; 696 unistr *remote_dsa_address; 697 GUID nc_obj_guid; 698 GUID remote_dsa_obj_guid; 699 } drsuapi_DsReplicaOp; 700 701 typedef struct { 702 NTTIME time; 703 uint32 count; 704 [size_is(count)] drsuapi_DsReplicaOp array[]; 705 } drsuapi_DsReplicaOpCtr; 706 707 typedef struct { 708 unistr *attribute_name; 709 unistr *object_dn; 710 uint32 value_length; 711 [size_is(value_length)] uint8 *value[]; 712 NTTIME deleted; 713 NTTIME created; 714 uint32 version; 715 NTTIME originating_last_changed; 716 GUID originating_dsa_invocation_id; 717 hyper originating_usn; 718 hyper local_usn; 719 } drsuapi_DsReplicaAttrValMetaData; 720 721 typedef struct { 722 uint32 count; 723 int32 enumeration_context; 724 [size_is(count)] drsuapi_DsReplicaAttrValMetaData array[]; 725 } drsuapi_DsReplicaAttrValMetaDataCtr; 726 727 typedef struct { 728 GUID source_dsa_invocation_id; 729 hyper highest_usn; 730 NTTIME last_sync_success; 731 } drsuapi_DsReplicaCoursor2; 732 733 typedef struct { 734 uint32 count; 735 int32 enumeration_context; 736 [size_is(count)] drsuapi_DsReplicaCoursor2 array[]; 737 } drsuapi_DsReplicaCoursor2Ctr; 738 739 typedef struct { 740 GUID source_dsa_invocation_id; 741 hyper highest_usn; 742 NTTIME last_sync_success; 743 unistr *source_dsa_obj_dn; 744 } drsuapi_DsReplicaCoursor3; 745 746 typedef struct { 747 uint32 count; 748 int32 enumeration_context; 749 [size_is(count)] drsuapi_DsReplicaCoursor3 array[]; 750 } drsuapi_DsReplicaCoursor3Ctr; 751 752 typedef struct { 753 unistr *attribute_name; 754 uint32 version; 755 NTTIME originating_last_changed; 756 GUID originating_dsa_invocation_id; 757 hyper originating_usn; 758 hyper local_usn; 759 unistr *originating_dsa_obj_dn; 760 } drsuapi_DsReplicaObjMetaData2; 761 762 typedef struct { 763 uint32 count; 764 int32 enumeration_context; 765 [size_is(count)] drsuapi_DsReplicaObjMetaData2 array[]; 766 } drsuapi_DsReplicaObjMetaData2Ctr; 767 768 typedef struct { 769 unistr *attribute_name; 770 unistr *object_dn; 771 uint32 value_length; 772 [size_is(value_length)] uint8 *value[]; 773 NTTIME deleted; 774 NTTIME created; 775 uint32 version; 776 NTTIME originating_last_changed; 777 GUID originating_dsa_invocation_id; 778 hyper originating_usn; 779 hyper local_usn; 780 unistr *originating_dsa_obj_dn; 781 } drsuapi_DsReplicaAttrValMetaData2; 782 783 typedef struct { 784 uint32 count; 785 int32 enumeration_context; 786 [size_is(count)] drsuapi_DsReplicaAttrValMetaData2 array[]; 787 } drsuapi_DsReplicaAttrValMetaData2Ctr; 788 789 typedef struct { 790 hyper u1; /* session number? */ 791 uint32 u2; 792 uint32 u3; 793 GUID bind_guid; 794 NTTIME_1sec bind_time; 795 uint32 u4; /* flags? */ 796 uint32 u5; 797 } drsuapi_DsReplicaConnection04; 798 799 typedef struct { 800 [range(0,10000)] uint32 count; 801 uint32 reserved; 802 [size_is(count)] drsuapi_DsReplicaConnection04 array[]; 803 } drsuapi_DsReplicaConnection04Ctr; 804 805 typedef struct { 806 unistr *str1; 807 uint32 u1; 808 uint32 u2; 809 uint32 u3; 810 uint32 u4; 811 uint32 u5; 812 hyper u6; 813 uint32 u7; 814 } drsuapi_DsReplica06; 815 816 typedef struct { 817 [range(0,256)] uint32 count; 818 uint32 reserved; 819 [size_is(count)] drsuapi_DsReplica06 array[]; 820 } drsuapi_DsReplica06Ctr; 821 822 typedef [switch_type(drsuapi_DsReplicaInfoType)] union { 823 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS)] drsuapi_DsReplicaNeighbourCtr *neighbours; 824 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS)] drsuapi_DsReplicaCoursorCtr *coursors; 825 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA)] drsuapi_DsReplicaObjMetaDataCtr *objmetadata; 826 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_CONNECT_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *connectfailures; 827 [case(DRSUAPI_DS_REPLICA_INFO_KCC_DSA_LINK_FAILURES)] drsuapi_DsReplicaKccDsaFailuresCtr *linkfailures; 828 [case(DRSUAPI_DS_REPLICA_INFO_PENDING_OPS)] drsuapi_DsReplicaOpCtr *pendingops; 829 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA)] drsuapi_DsReplicaAttrValMetaDataCtr *attrvalmetadata; 830 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS2)] drsuapi_DsReplicaCoursor2Ctr *coursors2; 831 [case(DRSUAPI_DS_REPLICA_INFO_CURSORS3)] drsuapi_DsReplicaCoursor3Ctr *coursors3; 832 [case(DRSUAPI_DS_REPLICA_INFO_OBJ_METADATA2)] drsuapi_DsReplicaObjMetaData2Ctr *objmetadata2; 833 [case(DRSUAPI_DS_REPLICA_INFO_ATTRIBUTE_VALUE_METADATA2)] drsuapi_DsReplicaAttrValMetaData2Ctr *attrvalmetadata2; 834 [case(DRSUAPI_DS_REPLICA_INFO_NEIGHBORS02)] drsuapi_DsReplicaNeighbourCtr *neighbours02; 835 [case(DRSUAPI_DS_REPLICA_INFO_CONNECTIONS04)] drsuapi_DsReplicaConnection04Ctr *connections04; 836 [case(DRSUAPI_DS_REPLICA_INFO_CURSURS05)] drsuapi_DsReplicaCoursor05Ctr *coursors05; 837 [case(DRSUAPI_DS_REPLICA_INFO_06)] drsuapi_DsReplica06Ctr *i06; 838 } drsuapi_DsReplicaInfo; 839 840 WERROR drsuapi_DsReplicaGetInfo( 841 [in,ref] policy_handle *bind_handle, 842 [in] drsuapi_DsReplicaGetInfoLevel level, 843 [in,switch_is(level)] drsuapi_DsReplicaGetInfoRequest req, 844 [out] drsuapi_DsReplicaInfoType info_type, 845 [out,switch_is(info_type)] drsuapi_DsReplicaInfo info 846 ); 847 848 /*****************/ 849 /* Function 0x14 */ 850 WERROR DRSUAPI_ADD_SID_HISTORY(); 851 852 /*****************/ 853 /* Function 0x15 */ 854 WERROR DRSUAPI_GET_MEMBERSHIPS2(); 855 856 /*****************/ 857 /* Function 0x16 */ 858 WERROR DRSUAPI_REPLICA_VERIFY_OBJECTS(); 859 860 /*****************/ 861 /* Function 0x17 */ 862 WERROR DRSUAPI_GET_OBJECT_EXISTENCE(); 863 864 /*****************/ 865 /* Function 0x18 */ 866 WERROR DRSUAPI_QUERY_SITES_BY_COST(); 867} 868