/* dfs interface definition */ [ uuid("4fc742e0-4a10-11cf-8273-00aa004ae673"), version(3.0), pointer_default(unique), helpstring("Settings for Microsoft Distributed File System") ] interface netdfs { /******************/ /* Function: 0x00 */ typedef [v1_enum] enum { DFS_MANAGER_VERSION_NT4 = 0, DFS_MANAGER_VERSION_W2K = 2, DFS_MANAGER_VERSION_W2K3 = 4 } dfs_ManagerVersion; void dfs_GetManagerVersion( [out] dfs_ManagerVersion *version ); /******************/ /* Function: 0x01 */ WERROR dfs_Add ( [in] [string,charset(UTF16)] uint16 *path, [in] [string,charset(UTF16)] uint16 *server, [in,unique] [string,charset(UTF16)] uint16 *share, [in,unique] [string,charset(UTF16)] uint16 *comment, [in] uint32 flags ); /******************/ /* Function: 0x02 */ WERROR dfs_Remove ( [in] [string,charset(UTF16)] uint16 *dfs_entry_path, [in,unique] [string,charset(UTF16)] uint16 *servername, [in,unique] [string,charset(UTF16)] uint16 *sharename ); /******************/ /* Function: 0x03 */ typedef struct { } dfs_Info0; typedef struct { [string,charset(UTF16)] uint16 *path; } dfs_Info1; /* first 4 bits unverified yet */ typedef [public,bitmap32bit] bitmap { DFS_VOLUME_STATE_OK = 0x1, DFS_VOLUME_STATE_INCONSISTENT = 0x2, DFS_VOLUME_STATE_OFFLINE = 0x4, DFS_VOLUME_STATE_ONLINE = 0x8, DFS_VOLUME_STATE_STANDALONE = DFS_VOLUME_FLAVOR_STANDALONE, DFS_VOLUME_STATE_AD_BLOB = DFS_VOLUME_FLAVOR_AD_BLOB } dfs_VolumeState; typedef struct { [string,charset(UTF16)] uint16 *path; [string,charset(UTF16)] uint16 *comment; dfs_VolumeState state; uint32 num_stores; } dfs_Info2; const int DFS_STORAGE_STATES = 0xf; /* yes, this is a bitmap */ typedef [public,bitmap32bit] bitmap { DFS_STORAGE_STATE_OFFLINE = 1, DFS_STORAGE_STATE_ONLINE = 2, DFS_STORAGE_STATE_ACTIVE = 4 } dfs_StorageState; typedef struct { dfs_StorageState state; [string,charset(UTF16)] uint16 *server; [string,charset(UTF16)] uint16 *share; } dfs_StorageInfo; typedef struct { [string,charset(UTF16)] uint16 *path; [string,charset(UTF16)] uint16 *comment; dfs_VolumeState state; uint32 num_stores; [size_is(num_stores)] dfs_StorageInfo *stores; } dfs_Info3; typedef struct { [string,charset(UTF16)] uint16 *path; [string,charset(UTF16)] uint16 *comment; dfs_VolumeState state; uint32 timeout; GUID guid; uint32 num_stores; [size_is(num_stores)] dfs_StorageInfo *stores; } dfs_Info4; /* verified with dfsutil */ typedef [public,bitmap32bit] bitmap { DFS_PROPERTY_FLAG_INSITE_REFERRALS = 0x01, DFS_PROPERTY_FLAG_ROOT_SCALABILITY = 0x02, DFS_PROPERTY_FLAG_SITE_COSTING = 0x04, DFS_PROPERTY_FLAG_TARGET_FAILBACK = 0x08, DFS_PROPERTY_FLAG_CLUSTER_ENABLED = 0x10 /* untested */ } dfs_PropertyFlags; typedef struct { [string,charset(UTF16)] uint16 *path; [string,charset(UTF16)] uint16 *comment; dfs_VolumeState state; uint32 timeout; GUID guid; dfs_PropertyFlags flags; uint32 pktsize; uint32 num_stores; } dfs_Info5; typedef [v1_enum] enum { DFS_INVALID_PRIORITY_CLASS = -1, DFS_SITE_COST_NORMAL_PRIORITY_CLASS = 0, DFS_GLOBAL_HIGH_PRIORITY_CLASS = 1, DFS_SITE_COST_HIGH_PRIORITY_CLASS = 2, DFS_SITE_COST_LOW_PRIORITY_CLASS = 3, DFS_GLOBAL_LOW_PRIORITY_CLASS = 4 } dfs_Target_PriorityClass; typedef struct { dfs_Target_PriorityClass target_priority_class; uint16 target_priority_rank; uint16 reserved; } dfs_Target_Priority; typedef struct { dfs_StorageInfo info; dfs_Target_Priority target_priority; } dfs_StorageInfo2; typedef struct { [string,charset(UTF16)] uint16 *entry_path; [string,charset(UTF16)] uint16 *comment; dfs_VolumeState state; uint32 timeout; GUID guid; dfs_PropertyFlags flags; uint32 pktsize; uint16 num_stores; [size_is(num_stores)] dfs_StorageInfo2 *stores; } dfs_Info6; typedef struct { GUID generation_guid; } dfs_Info7; typedef struct { [string,charset(UTF16)] uint16 *comment; } dfs_Info100; typedef struct { dfs_StorageState state; } dfs_Info101; typedef struct { uint32 timeout; } dfs_Info102; typedef struct { dfs_PropertyFlags flags; } dfs_Info103; typedef struct { dfs_Target_Priority priority; } dfs_Info104; typedef struct { [string,charset(UTF16)] uint16 *comment; dfs_VolumeState state; uint32 timeout; uint32 property_flag_mask; uint32 property_flags; } dfs_Info105; typedef struct { dfs_StorageState state; dfs_Target_Priority priority; } dfs_Info106; typedef struct { [string,charset(UTF16)] uint16 *dom_root; } dfs_Info200; typedef enum { DFS_VOLUME_FLAVOR_STANDALONE = 0x100, DFS_VOLUME_FLAVOR_AD_BLOB = 0x200 } dfs_VolumeFlavor; typedef struct { dfs_VolumeFlavor flavor; [string,charset(UTF16)] uint16 *dom_root; } dfs_Info300; typedef union { [case(0)] dfs_Info0 *info0; [case(1)] dfs_Info1 *info1; [case(2)] dfs_Info2 *info2; [case(3)] dfs_Info3 *info3; [case(4)] dfs_Info4 *info4; [case(5)] dfs_Info5 *info5; [case(6)] dfs_Info6 *info6; [case(7)] dfs_Info7 *info7; [case(100)] dfs_Info100 *info100; [case(101)] dfs_Info101 *info101; [case(102)] dfs_Info102 *info102; [case(103)] dfs_Info103 *info103; [case(104)] dfs_Info104 *info104; [case(105)] dfs_Info105 *info105; [case(106)] dfs_Info106 *info106; } dfs_Info; WERROR dfs_SetInfo ( [in] [string,charset(UTF16)] uint16 dfs_entry_path[], [in,unique] [string,charset(UTF16)] uint16 *servername, [in,unique] [string,charset(UTF16)] uint16 *sharename, [in] uint32 level, [in,ref,switch_is(level)] dfs_Info *info ); /******************/ /* Function: 0x04 */ WERROR dfs_GetInfo ( [in] [string,charset(UTF16)] uint16 dfs_entry_path[], [in,unique] [string,charset(UTF16)] uint16 *servername, [in,unique] [string,charset(UTF16)] uint16 *sharename, [in] uint32 level, [out,switch_is(level)] dfs_Info *info ); /******************/ /* Function: 0x05 */ typedef struct { uint32 count; [size_is(count)] dfs_Info1 *s; } dfs_EnumArray1; typedef struct { uint32 count; [size_is(count)] dfs_Info2 *s; } dfs_EnumArray2; typedef struct { uint32 count; [size_is(count)] dfs_Info3 *s; } dfs_EnumArray3; typedef struct { uint32 count; [size_is(count)] dfs_Info4 *s; } dfs_EnumArray4; typedef struct { uint32 count; [size_is(count)] dfs_Info200 *s; } dfs_EnumArray200; typedef struct { uint32 count; [size_is(count)] dfs_Info300 *s; } dfs_EnumArray300; typedef union { [case(1)] dfs_EnumArray1 *info1; [case(2)] dfs_EnumArray2 *info2; [case(3)] dfs_EnumArray3 *info3; [case(4)] dfs_EnumArray4 *info4; [case(200)] dfs_EnumArray200 *info200; [case(300)] dfs_EnumArray300 *info300; } dfs_EnumInfo; typedef struct { uint32 level; [switch_is(level)] dfs_EnumInfo e; } dfs_EnumStruct; WERROR dfs_Enum ( [in] uint32 level, [in] uint32 bufsize, [in,out,unique] dfs_EnumStruct *info, [in,out,unique] uint32 *total ); /* Function 0x06 */ WERROR dfs_Rename(); /* Function 0x07 */ WERROR dfs_Move(); /* Function 0x08 */ WERROR dfs_ManagerGetConfigInfo(); /* Function 0x09 */ WERROR dfs_ManagerSendSiteInfo(); /* Function 0x0a */ typedef struct { uint32 unknown1; [string,charset(UTF16)] uint16 *unknown2; } dfs_UnknownStruct; WERROR dfs_AddFtRoot( [in] [string,charset(UTF16)] uint16 servername[], [in] [string,charset(UTF16)] uint16 dns_servername[], [in] [string,charset(UTF16)] uint16 dfsname[], [in] [string,charset(UTF16)] uint16 rootshare[], [in] [string,charset(UTF16)] uint16 comment[], [in] [string,charset(UTF16)] uint16 dfs_config_dn[], [in] uint8 unknown1, [in] uint32 flags, [in,out,unique] dfs_UnknownStruct **unknown2 ); /* Function 0x0b */ WERROR dfs_RemoveFtRoot( [in] [string,charset(UTF16)] uint16 servername[], [in] [string,charset(UTF16)] uint16 dns_servername[], [in] [string,charset(UTF16)] uint16 dfsname[], [in] [string,charset(UTF16)] uint16 rootshare[], [in] uint32 flags, [in,out,unique] dfs_UnknownStruct **unknown ); /* Function 0x0c */ WERROR dfs_AddStdRoot( [in] [string,charset(UTF16)] uint16 servername[], [in] [string,charset(UTF16)] uint16 rootshare[], [in] [string,charset(UTF16)] uint16 comment[], [in] uint32 flags ); /* Function 0x0d */ WERROR dfs_RemoveStdRoot( [in] [string,charset(UTF16)] uint16 servername[], [in] [string,charset(UTF16)] uint16 rootshare[], [in] uint32 flags ); /* Function 0x0e */ WERROR dfs_ManagerInitialize( [in] [string,charset(UTF16)] uint16 *servername, [in] uint32 flags ); /* Function 0x0f */ WERROR dfs_AddStdRootForced( [in] [string,charset(UTF16)] uint16 servername[], [in] [string,charset(UTF16)] uint16 rootshare[], [in] [string,charset(UTF16)] uint16 comment[], [in] [string,charset(UTF16)] uint16 store[] /* C:\\whatever */ ); /* Function 0x10 */ WERROR dfs_GetDcAddress(); /* Function 0x11 */ WERROR dfs_SetDcAddress(); /* Function 0x12 */ WERROR dfs_FlushFtTable( [in] [string,charset(UTF16)] uint16 servername[], [in] [string,charset(UTF16)] uint16 rootshare[] ); /* Function 0x13 */ WERROR dfs_Add2(); /* Function 0x14 */ WERROR dfs_Remove2(); /* Function 0x15 */ WERROR dfs_EnumEx( [in] [string,charset(UTF16)] uint16 dfs_name[], [in] uint32 level, [in] uint32 bufsize, [in,out,unique] dfs_EnumStruct *info, [in,out,unique] uint32 *total ); /* Function 0x16 */ WERROR dfs_SetInfo2(); }