windows-nt/Source/XPSP1/NT/base/fs/dfs/driver/dfsstruc.h
2020-09-26 16:20:57 +08:00

274 lines
5.3 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//+----------------------------------------------------------------------------
//
// Copyright (C) 1992, Microsoft Corporation.
//
// File: dfsstruc.h
//
// Contents:
// This module defines the data structures that make up the major internal
// part of the DFS file system.
//
// Functions:
//
//-----------------------------------------------------------------------------
#ifndef _DFSSTRUC_
#define _DFSSTRUC_
typedef enum {
DFS_STATE_UNINITIALIZED = 0,
DFS_STATE_INITIALIZED = 1,
DFS_STATE_STARTED = 2,
DFS_STATE_STOPPING = 3,
DFS_STATE_STOPPED = 4
} DFS_OPERATIONAL_STATE;
typedef enum {
DFS_UNKNOWN = 0,
DFS_CLIENT = 1,
DFS_SERVER = 2,
DFS_ROOT_SERVER = 3,
} DFS_MACHINE_STATE;
typedef enum {
LV_UNINITIALIZED = 0,
LV_INITSCHEDULED,
LV_INITINPROGRESS,
LV_INITIALIZED,
LV_VALIDATED
} DFS_LV_STATE;
//
// The DFS_DATA record is the top record in the DFS file system in-memory
// data structure. This structure must be allocated from non-paged pool.
//
typedef struct _DFS_DATA {
//
// The type and size of this record (must be DFS_NTC_DATA_HEADER)
//
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
//
// A queue of all attached volume device objects
//
LIST_ENTRY AVdoQueue;
//
// A queue of all attached file system device objects
//
LIST_ENTRY AFsoQueue;
//
// A pointer to the Driver object we were initialized with
//
PDRIVER_OBJECT DriverObject;
//
// A pointer to the \Dfs device object
//
PDEVICE_OBJECT FileSysDeviceObject;
//
// A pointer to an array of provider records
//
struct _PROVIDER_DEF *pProvider;
int cProvider, maxProvider;
//
// A resource variable to control access to the global data record
//
ERESOURCE Resource;
//
// A pointer to our EPROCESS struct, which is a required input to the
// Cache Management subsystem. This field is simply set each time an
// FSP thread is started, since it is easiest to do while running in the
// Fsp.
//
PEPROCESS OurProcess;
//
// Principal Name of this machine.
//
UNICODE_STRING PrincipalName;
//
// The NetBIOS name of this machine. Needed for public Dfs APIs.
//
UNICODE_STRING NetBIOSName;
//
// The operational state of the machine - Started, Stopped, etc.
//
DFS_OPERATIONAL_STATE OperationalState;
//
// The state of the machine - DC, Server, Client etc.
//
DFS_MACHINE_STATE MachineState;
//
// Is this a DC?
//
BOOLEAN IsDC;
//
// The state of the local volumes - initialize or validated
DFS_LV_STATE LvState;
//
// The system wide Partition Knowledge Table (PKT)
//
DFS_PKT Pkt;
//
// A hash table for associating DFS_FCBs with file objects
//
struct _FCB_HASH_TABLE *FcbHashTable;
//
// A hash table for associating Sites with machines
//
struct _SITE_HASH_TABLE *SiteHashTable;
//
// Another hash table for associating IP addresses with sites
//
struct _IP_HASH_TABLE *IpHashTable;
//
// Hash table for special names
//
struct _SPECIAL_HASH_TABLE *SpcHashTable;
//
// Hash table for FtDfs's
//
struct _SPECIAL_HASH_TABLE *FtDfsHashTable;
//
// Lpc Port info
//
struct _DFS_LPC_INFO DfsLpcInfo;
} DFS_DATA, *PDFS_DATA;
#define MAX_PROVIDERS 5 // number of pre-allocated provider records
//
// A PROVIDER_DEF is a provider definition record, which maps a provider
// ID in a referral record to an installed provider.
//
typedef struct _PROVIDER_DEF {
//
// The type and size of this record (must be DFS_NTC_PROVIDER)
//
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
//
// Provider ID and Capabilities, same as in the DS_REFERRAL structure.
//
USHORT eProviderId;
USHORT fProvCapability;
//
// The following field gives the name of the device for the provider.
//
UNICODE_STRING DeviceName;
//
// Referenced pointers to the associated file and device objects
//
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;
} PROVIDER_DEF, *PPROVIDER_DEF;
//
// For every open file on a volume object to which we are attached, we
// maintain an FCB.
//
typedef struct _DFS_FCB {
//
// Type and size of this record (must be DFS_NTC_FCB)
//
NODE_TYPE_CODE NodeTypeCode;
NODE_BYTE_SIZE NodeByteSize;
//
// A list entry for the hash table chain.
//
LIST_ENTRY HashChain;
//
// The following field is the fully qualified file name for this DFS_FCB/DCB
// starting from the logical root.
//
UNICODE_STRING FullFileName;
//
// The following fields give the file on which this DFS_FCB
// have been opened.
//
PFILE_OBJECT FileObject;
} DFS_FCB, *PDFS_FCB;
//
// We need to order our referrals by site; we normalize the referral list of names and
// types into the following structure.
//
typedef struct _DFS_REFERRAL_LIST {
UNICODE_STRING pName; // ex: JHARPERDC1
UNICODE_STRING pAddress; // ex: \\JHARPERDC1\MYFTDFS
ULONG Type;
} DFS_REFERRAL_LIST, *PDFS_REFERRAL_LIST;
#endif // _DFSSTRUC_