342 lines
7.3 KiB
C
342 lines
7.3 KiB
C
/*++
|
|
|
|
Copyright (c) 1991 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
browsenet.h
|
|
|
|
Abstract:
|
|
|
|
Private header file to be included by Browser service modules that
|
|
need to deal with the network specific browser tables.
|
|
|
|
Author:
|
|
|
|
Rita Wong (ritaw) 22-May-1991
|
|
|
|
Revision History:
|
|
|
|
--*/
|
|
|
|
|
|
#ifndef _BROWSENET_INCLUDED_
|
|
#define _BROWSENET_INCLUDED_
|
|
|
|
#define NETWORK_BECOME_MASTER_POSTED 0x00000001
|
|
#define NETWORK_ANNOUNCE_NEEDED 0x00000002
|
|
#define NETWORK_GET_MASTER_ANNOUNCE_POSTED 0x00000008
|
|
#define NETWORK_WANNISH 0x80000000
|
|
#define NETWORK_RAS 0x40000000
|
|
#define NETWORK_IPX 0x20000000
|
|
#define NETWORK_BOUND 0x10000000
|
|
#define NETWORK_PDC 0x08000000
|
|
|
|
#define OTHERDOMAIN_INVALID 0x00000001
|
|
|
|
typedef struct _NET_OTHER_DOMAIN {
|
|
LIST_ENTRY Next;
|
|
ULONG Flags;
|
|
WCHAR Name[DNLEN+1];
|
|
} NET_OTHER_DOMAIN, *PNET_OTHER_DOMAIN;
|
|
|
|
//
|
|
// Network.
|
|
//
|
|
// Almost all of the browser data structures are tied to the "Network"
|
|
// structure.
|
|
//
|
|
// It contains the browse list for the network and information about the
|
|
// domain (including the name of the master, etc).
|
|
//
|
|
|
|
typedef struct _NETWORK {
|
|
//
|
|
// The Lock protects the contents of the network structure, including
|
|
// the browse list, backup list and domain list.
|
|
//
|
|
|
|
RTL_RESOURCE Lock;
|
|
|
|
LONG LockCount;
|
|
|
|
ULONG Flags;
|
|
|
|
//
|
|
// The NextNet list links the structure to other networks.
|
|
//
|
|
|
|
LIST_ENTRY NextNet;
|
|
|
|
//
|
|
// Domain this network is specific to
|
|
//
|
|
|
|
PDOMAIN_INFO DomainInfo;
|
|
|
|
//
|
|
// The ReferenceCount indicates the number of threads accessing this
|
|
// network structure.
|
|
//
|
|
|
|
ULONG ReferenceCount;
|
|
|
|
//
|
|
// The NetworkName is the name of the network driver that is used
|
|
// to access the network. This is used to identify the network
|
|
// to the bowser driver so it can return the correct network list.
|
|
//
|
|
|
|
UNICODE_STRING NetworkName; // Name of network (\Device\Nbf)
|
|
|
|
struct _NETWORK *AlternateNetwork; // Alternate name for network (if IPX).
|
|
|
|
//
|
|
// This is a bitmask indicating the role of this browser server.
|
|
//
|
|
|
|
ULONG Role;
|
|
|
|
ULONG MasterAnnouncementIndex;
|
|
|
|
ULONG UpdateAnnouncementIndex;
|
|
|
|
ULONG NumberOfFailedBackupTimers;
|
|
|
|
ULONG NumberOfFailedPromotions;
|
|
|
|
ULONG NumberOfPromotionEventsLogged;
|
|
|
|
LONG LastBackupBrowserReturned;
|
|
|
|
LONG LastDomainControllerBrowserReturned;
|
|
|
|
//
|
|
// The time we stopped being a backup browser.
|
|
//
|
|
|
|
ULONG TimeStoppedBackup;
|
|
|
|
//
|
|
// The UncMasterBrowserName contains the name of the master browser server
|
|
// for this network.
|
|
//
|
|
|
|
WCHAR UncMasterBrowserName[UNCLEN+1]; // Name of master browser server
|
|
|
|
//
|
|
// Timer used when server is a backup browser server.
|
|
//
|
|
// When it expires, the browser downloads a new browser server
|
|
// list from the master browser server.
|
|
//
|
|
|
|
BROWSER_TIMER BackupBrowserTimer;
|
|
|
|
//
|
|
// Timer used if SMB server refuses an announcement
|
|
//
|
|
|
|
BROWSER_TIMER UpdateAnnouncementTimer;
|
|
|
|
//
|
|
// Server and domain list for backup browser (and # of entries in each).
|
|
//
|
|
|
|
PSERVER_INFO_101 BackupServerList;
|
|
DWORD TotalBackupServerListEntries;
|
|
DWORD BytesToHoldBackupServerList;
|
|
|
|
PSERVER_INFO_101 BackupDomainList;
|
|
DWORD TotalBackupDomainListEntries;
|
|
DWORD BytesToHoldBackupDomainList;
|
|
|
|
//
|
|
// Lock protecting MasterFlags section of Network structure.
|
|
//
|
|
|
|
ULONG MasterFlags;
|
|
ULONG MasterBrowserTimerCount; // # of times we've run the master timer.
|
|
|
|
//
|
|
// Master browsers maintain their server list in an "interim server
|
|
// list", not as raw data from the server.
|
|
//
|
|
|
|
ULONG LastBowserServerQueried;
|
|
INTERIM_SERVER_LIST BrowseTable; // Browse list for network.
|
|
|
|
ULONG LastBowserDomainQueried;
|
|
INTERIM_SERVER_LIST DomainList; // List of domains active on network
|
|
|
|
//
|
|
// If the browser's role is MasterBrowserServer, then the
|
|
// OtherDomainsList contains the list of other domains.
|
|
//
|
|
|
|
LIST_ENTRY OtherDomainsList; // List of domain master browser.
|
|
|
|
//
|
|
// Timer used when server is a master browser server.
|
|
//
|
|
// When it expires, the master browser downloads a new browser
|
|
// server list from the domain master browser server
|
|
//
|
|
|
|
BROWSER_TIMER MasterBrowserTimer;
|
|
|
|
//
|
|
// Timer used to announce the domain.
|
|
//
|
|
|
|
BROWSER_TIMER MasterBrowserAnnouncementTimer;
|
|
|
|
//
|
|
// List of cached browser responses.
|
|
//
|
|
|
|
CRITICAL_SECTION ResponseCacheLock;
|
|
|
|
LIST_ENTRY ResponseCache;
|
|
|
|
//
|
|
// For browse masters, this is the time the cache was last flushed.
|
|
//
|
|
// Every <n> seconds, we will age the cache on the master and refresh
|
|
// the list with the list from the driver.
|
|
//
|
|
|
|
DWORD TimeCacheFlushed;
|
|
|
|
DWORD NumberOfCachedResponses;
|
|
|
|
} NETWORK, *PNETWORK;
|
|
|
|
#if DBG
|
|
BOOL
|
|
BrLockNetwork(
|
|
IN PNETWORK Network,
|
|
IN PCHAR FileName,
|
|
IN ULONG LineNumber
|
|
);
|
|
|
|
BOOL
|
|
BrLockNetworkShared(
|
|
IN PNETWORK Network,
|
|
IN PCHAR FileName,
|
|
IN ULONG LineNumber
|
|
);
|
|
|
|
VOID
|
|
BrUnlockNetwork(
|
|
IN PNETWORK Network,
|
|
IN PCHAR FileName,
|
|
IN ULONG LineNumber
|
|
);
|
|
|
|
#define LOCK_NETWORK(Network) BrLockNetwork(Network, __FILE__, __LINE__)
|
|
|
|
#define LOCK_NETWORK_SHARED(Network) BrLockNetworkShared(Network, __FILE__, __LINE__)
|
|
|
|
#define UNLOCK_NETWORK(Network) BrUnlockNetwork(Network, __FILE__, __LINE__)
|
|
|
|
#else
|
|
|
|
#define LOCK_NETWORK(Network) RtlAcquireResourceExclusive(&(Network)->Lock, TRUE)
|
|
|
|
#define LOCK_NETWORK_SHARED(Network) RtlAcquireResourceShared(&(Network)->Lock, TRUE)
|
|
|
|
#define UNLOCK_NETWORK(Network) RtlReleaseResource(&(Network)->Lock)
|
|
|
|
#endif
|
|
|
|
//
|
|
// The NET_ENUM_CALLBACK is a callback for BrEnumerateNetworks.
|
|
//
|
|
// It defines a routine that takes two parameters, the first is a network
|
|
// structure, the second is a context for that network.
|
|
//
|
|
|
|
|
|
typedef
|
|
NET_API_STATUS
|
|
(*PNET_ENUM_CALLBACK)(
|
|
PNETWORK Network,
|
|
PVOID Context
|
|
);
|
|
|
|
|
|
VOID
|
|
BrInitializeNetworks(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
BrUninitializeNetworks(
|
|
IN ULONG BrInitState
|
|
);
|
|
|
|
PNETWORK
|
|
BrReferenceNetwork(
|
|
PNETWORK PotentialNetwork
|
|
);
|
|
|
|
VOID
|
|
BrDereferenceNetwork(
|
|
IN PNETWORK Network
|
|
);
|
|
|
|
PNETWORK
|
|
BrFindNetwork(
|
|
PDOMAIN_INFO DomainInfo,
|
|
PUNICODE_STRING TransportName
|
|
);
|
|
|
|
PNETWORK
|
|
BrFindWannishMasterBrowserNetwork(
|
|
PDOMAIN_INFO DomainInfo
|
|
);
|
|
|
|
VOID
|
|
BrDumpNetworks(
|
|
VOID
|
|
);
|
|
|
|
NET_API_STATUS
|
|
BrEnumerateNetworks(
|
|
PNET_ENUM_CALLBACK Callback,
|
|
PVOID Context
|
|
);
|
|
|
|
NET_API_STATUS
|
|
BrEnumerateNetworksForDomain(
|
|
PDOMAIN_INFO DomainInfo,
|
|
PNET_ENUM_CALLBACK Callback,
|
|
PVOID Context
|
|
);
|
|
|
|
NET_API_STATUS
|
|
BrCreateNetworks(
|
|
PDOMAIN_INFO DomainInfo
|
|
);
|
|
|
|
NET_API_STATUS
|
|
BrCreateNetwork(
|
|
PUNICODE_STRING TransportName,
|
|
IN ULONG TransportFlags,
|
|
IN PUNICODE_STRING AlternateTransportName OPTIONAL,
|
|
IN PDOMAIN_INFO DomainInfo
|
|
);
|
|
|
|
NET_API_STATUS
|
|
BrDeleteNetwork(
|
|
IN PNETWORK Network,
|
|
IN PVOID Context
|
|
);
|
|
|
|
extern ULONG NumberOfServicedNetworks;
|
|
|
|
extern CRITICAL_SECTION NetworkCritSect;
|
|
|
|
#endif // _BROWSENET_INCLUDED_
|