#include "idl_types.h" import "misc.idl"; /* dfs blobs interface definition */ [ pointer_default(unique), helpstring("dfs referral blobs"), uuid("12345778-1234-abcd-0001-00000003") ] interface dfsblobs { typedef [bitmap32bit] bitmap { DFS_HEADER_FLAG_REFERAL_SVR = 0x00000001, DFS_HEADER_FLAG_STORAGE_SVR = 0x00000002, DFS_HEADER_FLAG_TARGET_BCK = 0x00000004 } DFS_HEADER_FLAG; typedef [enum16bit] enum { DFS_SERVER_NON_ROOT = 0x0000, DFS_SERVER_ROOT = 0x0001 } DFS_SERVER_TYPE; typedef [enum16bit] enum { DFS_FLAG_REFERRAL_DOMAIN_RESP = 0x0002, DFS_FLAG_REFERRAL_FIRST_TARGET_SET = 0x0004 } DFS_FLAGS_REFERRAL; typedef struct { uint16 size; uint16 server_type; uint16 entry_flags; nstring *share_name; } dfs_referral_v1; typedef struct { uint16 size; DFS_SERVER_TYPE server_type; DFS_FLAGS_REFERRAL entry_flags; uint32 proximity; uint32 ttl; [relative_short] nstring *DFS_path; [relative_short] nstring *DFS_alt_path; [relative_short] nstring *netw_address; } dfs_referral_v2; typedef struct { [relative_short] nstring *DFS_path; [relative_short] nstring *DFS_alt_path; [relative_short] nstring *netw_address; /* As stated in MS DFSC 2.2.4.3.1 this array was guid but now MUST be 16 null bytes*/ } dfs_normal_referral; typedef struct { [relative_short] nstring *special_name; uint16 nb_expanded_names; [relative_short,subcontext(0),flag(STR_NOTERM|NDR_REMAINING)] string_array *expanded_names; } dfs_domain_referral; typedef [nodiscriminant] union { [case(0)] dfs_normal_referral r1; [case(2)] dfs_domain_referral r2; [default]; } dfs_referral; typedef [nodiscriminant] union { [case(16)] uint8 *value; [default]; } dfs_padding; typedef [flag(NDR_NOALIGN)] struct { DFS_SERVER_TYPE server_type; DFS_FLAGS_REFERRAL entry_flags; uint32 ttl; [switch_is(entry_flags & DFS_FLAG_REFERRAL_DOMAIN_RESP)] dfs_referral referrals; } dfs_referral_v3_remaining; typedef [flag(NDR_NOALIGN)] struct { uint16 size; dfs_referral_v3_remaining data; /* this is either 0 or 16 bytes */ [switch_is(size - 18)] dfs_padding service_site_guid; } dfs_referral_v3; typedef struct { uint16 size; DFS_SERVER_TYPE server_type; DFS_FLAGS_REFERRAL entry_flags; uint32 ttl; dfs_normal_referral r1; } dfs_referral_v4; typedef [nodiscriminant] union { [case(1)] dfs_referral_v1 v1; [case(2)] dfs_referral_v2 v2; [case(3)] dfs_referral_v3 v3; [case(4)] dfs_referral_v4 v4; [default]; } dfs_referral_version; typedef [flag(NDR_NOALIGN)] [relative_base] struct { uint16 version; [switch_is(version)] dfs_referral_version referral; } dfs_referral_type; typedef [public] struct { uint16 path_consumed; uint16 nb_referrals; DFS_HEADER_FLAG header_flags; dfs_referral_type referral_entries[nb_referrals]; } dfs_referral_resp; typedef [public] struct { uint16 max_referral_level; nstring servername; } dfs_GetDFSReferral_in; [public] void dfs_GetDFSReferral( [in] dfs_GetDFSReferral_in req, [out,ref] dfs_referral_resp *resp ); }