223 lines
5.9 KiB
C++
223 lines
5.9 KiB
C++
|
//+----------------------------------------------------------------------------
|
||
|
//
|
||
|
// Copyright (C) 1997, Microsoft Corporation
|
||
|
//
|
||
|
// File: struct.hxx
|
||
|
//
|
||
|
//-----------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef _STRUCT_HXX
|
||
|
#define _STRUCT_HXX
|
||
|
|
||
|
#define DOMUNKNONN 0
|
||
|
#define DOMDFS 1
|
||
|
#define STDDFS 2
|
||
|
|
||
|
typedef struct _DFS_LOCALVOLUME {
|
||
|
LPWSTR wszObjectName;
|
||
|
LPWSTR wszEntryPath;
|
||
|
} DFS_LOCALVOLUME, *PDFS_LOCALVOLUME;
|
||
|
|
||
|
typedef struct _DFS_ROOTLOCALVOL {
|
||
|
LPWSTR wszObjectName;
|
||
|
LPWSTR wszEntryPath;
|
||
|
LPWSTR wszShortEntryPath;
|
||
|
ULONG dwEntryType;
|
||
|
LPWSTR wszShareName;
|
||
|
LPWSTR wszStorageId;
|
||
|
PDFS_LOCALVOLUME pDfsLocalVol;
|
||
|
ULONG cLocalVolCount;
|
||
|
} DFS_ROOTLOCALVOL, *PDFS_ROOTLOCALVOL;
|
||
|
|
||
|
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;
|
||
|
ULONG vFlags;
|
||
|
} DFS_VOLUME, *PDFS_VOLUME;
|
||
|
|
||
|
typedef struct _DFS_VOLUME_LIST {
|
||
|
ULONG DfsType;
|
||
|
ULONG Version;
|
||
|
ULONG VolCount;
|
||
|
ULONG AllocatedVolCount;
|
||
|
PDFS_VOLUME *Volumes;
|
||
|
GUID SiteGuid;
|
||
|
ULONG SiteCount;
|
||
|
ULONG sFlags;
|
||
|
LIST_ENTRY SiteList;
|
||
|
LPWSTR *RootServers;
|
||
|
PDFS_ROOTLOCALVOL pRootLocalVol;
|
||
|
ULONG cRootLocalVol;
|
||
|
} DFS_VOLUME_LIST, *PDFS_VOLUME_LIST;
|
||
|
|
||
|
typedef struct _LDAP_OBJECT {
|
||
|
LPWSTR wszObjectName;
|
||
|
ULONG cbObjectData;
|
||
|
PCHAR pObjectData;
|
||
|
} LDAP_OBJECT, *PLDAP_OBJECT;
|
||
|
|
||
|
typedef struct _LDAP_PKT {
|
||
|
ULONG cLdapObjects;
|
||
|
PLDAP_OBJECT rgldapObjects;
|
||
|
} LDAP_PKT, *PLDAP_PKT;
|
||
|
|
||
|
typedef struct _DFS_VOLUME_PROPERTIES {
|
||
|
GUID idVolume;
|
||
|
LPWSTR wszPrefix;
|
||
|
LPWSTR wszShortPrefix;
|
||
|
ULONG dwType;
|
||
|
ULONG dwState;
|
||
|
LPWSTR wszComment;
|
||
|
ULONG dwTimeout;
|
||
|
FILETIME ftPrefix;
|
||
|
FILETIME ftState;
|
||
|
FILETIME ftComment;
|
||
|
ULONG dwVersion;
|
||
|
ULONG cbSvc;
|
||
|
PBYTE pSvc;
|
||
|
ULONG cbRecovery;
|
||
|
PBYTE pRecovery;
|
||
|
} DFS_VOLUME_PROPERTIES, *PDFS_VOLUME_PROPERTIES;
|
||
|
|
||
|
//
|
||
|
// Following are the recovery states that can be associated with the
|
||
|
// volumes. These are only the operations that can be in progress i.e. the
|
||
|
// first part of the recovery state. The exact stage of operations are
|
||
|
// denoted by the states below this.
|
||
|
//
|
||
|
|
||
|
#define DFS_RECOVERY_STATE_NONE (0x0000)
|
||
|
#define DFS_RECOVERY_STATE_CREATING (0x0001)
|
||
|
#define DFS_RECOVERY_STATE_ADD_SERVICE (0x0002)
|
||
|
#define DFS_RECOVERY_STATE_REMOVE_SERVICE (0x0003)
|
||
|
#define DFS_RECOVERY_STATE_DELETE (0x0004)
|
||
|
#define DFS_RECOVERY_STATE_MOVE (0x0005)
|
||
|
|
||
|
typedef enum _DFS_RECOVERY_STATE {
|
||
|
DFS_OPER_STAGE_START=1,
|
||
|
DFS_OPER_STAGE_SVCLIST_UPDATED=2,
|
||
|
DFS_OPER_STAGE_INFORMED_SERVICE=3,
|
||
|
DFS_OPER_STAGE_INFORMED_PARENT=4
|
||
|
} DFS_RECOVERY_STATE;
|
||
|
|
||
|
//
|
||
|
// Some MACROS to help in manipulating state and stage of VOL_RECOVERY_STATE.
|
||
|
//
|
||
|
#define DFS_COMPOSE_RECOVERY_STATE(op, s) ((op<<16)|(s))
|
||
|
#define DFS_SET_RECOVERY_STATE(State, s) ((State&0xffff)|(s<<16))
|
||
|
#define DFS_SET_OPER_STAGE(State, s) ((State&0xffff0000)|s)
|
||
|
#define DFS_GET_RECOVERY_STATE(s) ((s & 0xffff0000) >> 16)
|
||
|
#define DFS_GET_OPER_STAGE(s) (s & 0xffff)
|
||
|
|
||
|
//
|
||
|
// vFlags
|
||
|
//
|
||
|
#define VFLAGS_MODIFY 0x001
|
||
|
#define VFLAGS_DELETE 0x002
|
||
|
|
||
|
//
|
||
|
// Globals
|
||
|
//
|
||
|
|
||
|
extern WCHAR DfsConfigContainer[];
|
||
|
extern WCHAR DfsSpecialContainer[];
|
||
|
extern WCHAR DfsSpecialObject[];
|
||
|
extern WCHAR wszDfsRootName[];
|
||
|
extern ULONG GTimeout;
|
||
|
extern WCHAR wszDcName[];
|
||
|
|
||
|
//
|
||
|
// Undocumented
|
||
|
//
|
||
|
|
||
|
extern BOOLEAN fSwDebug;
|
||
|
extern BOOLEAN fArgView;
|
||
|
extern BOOLEAN fArgVerify;
|
||
|
|
||
|
VOID
|
||
|
MyPrintf(
|
||
|
PWCHAR format,
|
||
|
...);
|
||
|
|
||
|
VOID
|
||
|
MyFPrintf(
|
||
|
HANDLE hHandle,
|
||
|
PWCHAR format,
|
||
|
...);
|
||
|
|
||
|
|
||
|
//
|
||
|
// Entry types
|
||
|
//
|
||
|
|
||
|
#define PKT_ENTRY_TYPE_DFS 0x0001
|
||
|
#define PKT_ENTRY_TYPE_MACHINE 0x0002
|
||
|
#define PKT_ENTRY_TYPE_NONDFS 0x0004
|
||
|
#define PKT_ENTRY_TYPE_LEAFONLY 0x0008
|
||
|
#define PKT_ENTRY_TYPE_OUTSIDE_MY_DOM 0x0010
|
||
|
#define PKT_ENTRY_TYPE_INSITE_ONLY 0x0020 // Only give insite referrals.
|
||
|
#define PKT_ENTRY_TYPE_SYSVOL 0x0040
|
||
|
#define PKT_ENTRY_TYPE_REFERRAL_SVC 0x0080
|
||
|
#define PKT_ENTRY_TYPE_PERMANENT 0x0100
|
||
|
#define PKT_ENTRY_TYPE_DELETE_PENDING 0x0200
|
||
|
#define PKT_ENTRY_TYPE_LOCAL 0x0400
|
||
|
#define PKT_ENTRY_TYPE_LOCAL_XPOINT 0x0800
|
||
|
#define PKT_ENTRY_TYPE_OFFLINE 0x2000
|
||
|
#define PKT_ENTRY_TYPE_STALE 0x4000
|
||
|
|
||
|
//
|
||
|
// Sevice states
|
||
|
//
|
||
|
#define DFS_SERVICE_TYPE_MASTER (0x0001)
|
||
|
#define DFS_SERVICE_TYPE_READONLY (0x0002)
|
||
|
#define DFS_SERVICE_TYPE_LOCAL (0x0004)
|
||
|
#define DFS_SERVICE_TYPE_REFERRAL (0x0008)
|
||
|
#define DFS_SERVICE_TYPE_ACTIVE (0x0010)
|
||
|
#define DFS_SERVICE_TYPE_DOWN_LEVEL (0x0020)
|
||
|
#define DFS_SERVICE_TYPE_COSTLIER (0x0040)
|
||
|
#define DFS_SERVICE_TYPE_OFFLINE (0x0080)
|
||
|
|
||
|
//
|
||
|
// How we make args & switches
|
||
|
//
|
||
|
|
||
|
#define MAKEARG(x) \
|
||
|
WCHAR Arg##x[] = L"/" L#x L":"; \
|
||
|
LONG ArgLen##x = (sizeof(Arg##x) / sizeof(WCHAR)) - 1; \
|
||
|
BOOLEAN fArg##x;
|
||
|
|
||
|
#define SWITCH(x) \
|
||
|
WCHAR Sw##x[] = L"/" L#x ; \
|
||
|
BOOLEAN fSw##x;
|
||
|
|
||
|
#define FMAKEARG(x) \
|
||
|
static WCHAR Arg##x[] = L#x L":"; \
|
||
|
static LONG ArgLen##x = (sizeof(Arg##x) / sizeof(WCHAR)) - 1; \
|
||
|
static BOOLEAN fArg##x;
|
||
|
|
||
|
#define FSWITCH(x) \
|
||
|
static WCHAR Sw##x[] = L"/" L#x ; \
|
||
|
static BOOLEAN fSw##x;
|
||
|
|
||
|
#endif _STRUCT_HXX
|