/*++

Copyright (c) 1989 Microsoft Corporation.

Module Name:
   
    header.h
    
Abstract:
   
    This module contains the main infrastructure for mup data structures.
    
Revision History:

    Uday Hegde (udayh)   11\10\1999
    
NOTES:

*/

#ifndef __DFS_HEADER_H
#define __DFS_HEADER_H

#define DFS_OBJECT_MAJOR 0x81

typedef enum _DFS_OBJECT_TYPES {
    DFS_OT_UNDEFINED = 0x8100,
    DFS_OT_PREFIX_TABLE,
    DFS_OT_NAME_TABLE,
    DFS_OT_SERVER_INFO,
    DFS_OT_ROOT_OBJECT,
    DFS_OT_LINK_OBJECT,
    DFS_OT_REPLICA_OBJECT,
    DFS_OT_METADATA_STORAGE,
    DFS_OT_REGISTRY_MACHINE,
    DFS_OT_REFERRAL_STRUCT,
    DFS_OT_REGISTRY_STORE,
    DFS_OT_AD_STORE,
    DFS_OT_POLICY_OBJECT,
    DFS_OT_REFERRAL_LOAD_CONTEXT,
    DFS_OT_AD_DOMAIN,
    DFS_OT_ENTERPRISE_STORE
} DFS_OBJECT_TYPES;


typedef struct _DFS_OBJECT_HEADER {
    union {
        struct {
            UCHAR   ObjectType;          
            UCHAR   ObjectMajor;        // Only used for debugging.
        }Ob;
        USHORT NodeType;                // Mainly for debugging.
    }Node;
    SHORT  NodeSize;
    LONG    ReferenceCount;             // count of people referencing this.
} DFS_OBJECT_HEADER, *PDFS_OBJECT_HEADER;

#define DfsInitializeHeader(_hdr, _type, _size) \
        (_hdr)->Node.NodeType    = (USHORT)(_type),   \
        (_hdr)->NodeSize    = (USHORT)(_size),  \
        (_hdr)->ReferenceCount = 1

#define DfsIncrementReference(_hdr)   \
        InterlockedIncrement(&((PDFS_OBJECT_HEADER)(_hdr))->ReferenceCount)
#define DfsDecrementReference(_hdr)   \
        InterlockedDecrement(&((PDFS_OBJECT_HEADER)(_hdr))->ReferenceCount)


#define DfsGetHeaderType(_x)  (((PDFS_OBJECT_HEADER)(_x))->Node.NodeType)
#define DfsGetHeaderSize(_x)  (((PDFS_OBJECT_HEADER)(_x))->NodeSize)
#define DfsGetHeaderCount(_x)  (((PDFS_OBJECT_HEADER)(_x))->ReferenceCount)


#define DFS_FILTER_NAME               L"\\DfsServer"


typedef DWORD DFSSTATUS;


#endif /* __DFS_HEADER_H */