//+----------------------------------------------------------------------------
//
//  Copyright (C) 1997, Microsoft Corporation
//
//  File:       ftsup.hxx
//
//  Contents:   ftsup.c prototypes, etc
//
//  Classes:    CSites
//
//  Functions:  
//
//  History:    Dec 7, 1998   JHarper created
//
//-----------------------------------------------------------------------------

#ifndef _FTSUP_HXX
#define _FTSUP_HXX

typedef struct _DFS_VOLUME {

    LPWSTR      wszObjectName;
    GUID        idVolume;
    LPWSTR      wszPrefix;
    LPWSTR      wszShortPrefix;
    ULONG       dwType;
    ULONG       dwState;
    LPWSTR      wszComment;
    ULONG       dwTimeout;
    FILETIME    ftPrefix;
    FILETIME    ftState;
    FILETIME    ftComment;
    ULONG       dwVersion;
    FILETIME    *FtModification;
    ULONG       ReplCount;
    ULONG       AllocatedReplCount;
    DFS_REPLICA_INFO *ReplicaInfo;
    FILETIME    *DelFtModification;
    ULONG       DelReplCount;
    ULONG       AllocatedDelReplCount;
    DFS_REPLICA_INFO *DelReplicaInfo;
    ULONG       cbRecovery;
    PBYTE       pRecovery;

} DFS_VOLUME, *PDFS_VOLUME;

typedef struct _DFS_VOLUME_LIST {
    ULONG   Version;
    ULONG   VolCount;
    ULONG   AllocatedVolCount;
    DFS_VOLUME *Volumes;
    GUID    SiteGuid;
    ULONG   SiteCount;
    LIST_ENTRY SiteList;
} DFS_VOLUME_LIST, *PDFS_VOLUME_LIST;

DWORD
DfsGetDsBlob(
    LPWSTR wszFtDfsName,
    LPWSTR wszDcName,
    ULONG *pcbBlob,
    BYTE **ppBlob);

DWORD
DfsPutDsBlob(
    LPWSTR wszFtDfsName,
    LPWSTR wszDcName,
    ULONG cbBlob,
    BYTE *pBlob);

DWORD
DfsGetVolList(
    ULONG cbBlob,
    BYTE *pBlob,
    PDFS_VOLUME_LIST pDfsVolList);

DWORD
DfsPutVolList(
    ULONG *pcbBlob,
    BYTE **ppBlob,
    PDFS_VOLUME_LIST pDfsVolList);

VOID
DfsFreeVolList(
    PDFS_VOLUME_LIST pDfsVolList);

VOID
DfsFreeVol(
    PDFS_VOLUME pVol);

VOID
DfsFreeRepl(
    PDFS_REPLICA_INFO pRepl);

DWORD
DfsRecoverVolList(
    PDFS_VOLUME_LIST pDfsVolList);

DWORD
DfsVolDelete(
    PDFS_VOLUME_LIST pDfsVolList,
    ULONG iVol);

DWORD
DfsReplDeleteByIndex(
    PDFS_VOLUME pVol,
    ULONG iRepl);

DWORD
DfsReplDeleteByName(
    PDFS_VOLUME pVol,
    LPWSTR pwszServerName,
    LPWSTR pwszShareName);

DWORD
DfsDelReplDelete(
    PDFS_VOLUME pVol,
    ULONG iDelRepl);

DWORD
SerializeReplicaList(
    ULONG ReplCount,
    DFS_REPLICA_INFO *pReplicaInfo,
    FILETIME *pFtModification,
    ULONG DelReplCount,
    DFS_REPLICA_INFO *pDelReplicaInfo,
    FILETIME *pDelFtModification,
    ULONG *cBuffer,
    PBYTE *ppBuffer);

DWORD
UnSerializeReplicaList(
    ULONG *pReplCount,
    ULONG *pAllocatedReplCount,
    DFS_REPLICA_INFO **ppReplicaInfo,
    FILETIME **ppFtModification,
    BYTE **ppBuffer);

DWORD
SerializeReplica(
    DFS_REPLICA_INFO *pDfsReplicaInfo,
    FILETIME *pFtModfication,
    PBYTE buffer,
    ULONG size);

ULONG
GetReplicaMarshalSize(
    DFS_REPLICA_INFO *pDfsReplicaInfo,
    FILETIME *pFtModfication);

VOID
FreeLdapPkt(
    LDAP_PKT *pldapPkt);

VOID
DfsDumpVolList(
    PDFS_VOLUME_LIST pDfsVolList);

DWORD
DfsGetSiteTable(
    PDFS_VOLUME_LIST VolList,
    PLDAP_OBJECT LdapObject);

DWORD
DfsGetVolume(
    PDFS_VOLUME pVolList,
    PLDAP_OBJECT LdapObject);

DWORD
DfsRemoveRootReplica(
    PDFS_VOLUME_LIST pDfsVolList,
    LPWSTR RootName);

DWORD
GetNetStorageInfo(
    PDFS_REPLICA_INFO pRepl,
    LPDFS_STORAGE_INFO pInfo,
    LPDWORD pcbInfo);

DWORD
GetNetInfoEx(
    PDFS_VOLUME pDfsVol,
    DWORD Level,
    LPDFS_INFO_3 pInfo,
    LPDWORD pcbInfo);

#endif _FTSUP_HXX