NT4/private/newsam2/server/global.c
2020-09-30 17:12:29 +02:00

306 lines
7.4 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) 1990 Microsoft Corporation
Module Name:
global.c
Abstract:
This file contains global variables for the SAM server program.
Note: There are also some global variables in the files generated
by the RPC midl compiler. These variables start with the
prefix "samr_".
Author:
Jim Kelly (JimK) 4-July-1991
Environment:
User Mode - Win32
Revision History:
--*/
///////////////////////////////////////////////////////////////////////////////
// //
// Includes //
// //
///////////////////////////////////////////////////////////////////////////////
#include <samsrvp.h>
///////////////////////////////////////////////////////////////////////////////
// //
// Global variables //
// //
///////////////////////////////////////////////////////////////////////////////
#if SAMP_DIAGNOSTICS
//
// SAM Global Controls - see flags in samsrvp.h
//
ULONG SampGlobalFlag = 0;
#endif //SAMP_DIAGNOSTICS
//
// Internal data structure and Registry database synchronization lock
//
// The SampTransactionWithinDomain field is used to track whether a
// lock held for exclusive WRITE access is for a transaction within
// a single domain. If so, then SampTransactionDomainIndex contains
// the index into SampDefinedDomains of the domain being modified.
//
RTL_RESOURCE SampLock;
BOOLEAN SampTransactionWithinDomain;
ULONG SampTransactionDomainIndex;
//
// The type of product this SAM server is running in
//
NT_PRODUCT_TYPE SampProductType;
//
// Used to indicate whether the SAM service is currently processing
// normal client calls. If not, then trusted client calls will still
// be processed, but non-trusted client calls will be rejected.
//
SAMP_SERVICE_STATE SampServiceState;
//
// This boolean is set to TRUE if the LSA auditing policy indicates
// account auditing is enabled. Otherwise, this will be FALSE.
//
// This enables SAM to skip all auditing processing unless auditing
// is currently enabled.
//
BOOLEAN SampAccountAuditingEnabled;
//
// This is a handle to the root of the SAM backstore information in the
// registry. This is the level at which the RXACT information is
// established. This key can not be closed if there are any SERVER object
// context blocks active.
// ("SAM")
//
HANDLE SampKey;
//
// This is the pointer to the RXactContext structure that will be created
// when RXact is initialized. It must be passed into each RXact call.
//
PRTL_RXACT_CONTEXT SampRXactContext;
//
// Keep a list of server and domain contexts
//
LIST_ENTRY SampContextListHead;
//
// This array contains information about each domain known to this
// SAM server. Reference and Modification of this array is protected
// by the SampLock.
//
ULONG SampDefinedDomainsCount;
PSAMP_DEFINED_DOMAINS SampDefinedDomains;
//
// Object type-independent information for each of the various
// SAM defined objects.
// This information is READ-ONLY once initialized.
SAMP_OBJECT_INFORMATION SampObjectInformation[ SampUnknownObjectType ];
//
// Count of the number of active opens
//
ULONG SampActiveContextCount;
//
// Address of DLL routine to do password filtering.
//
//PSAM_PF_PASSWORD_FILTER SampPasswordFilterDllRoutine;
//
// Unicode strings containing well known registry key names.
// These are read-only values once initialized.
//
UNICODE_STRING SampNameDomains;
UNICODE_STRING SampNameDomainGroups;
UNICODE_STRING SampNameDomainAliases;
UNICODE_STRING SampNameDomainAliasesMembers;
UNICODE_STRING SampNameDomainUsers;
UNICODE_STRING SampNameDomainAliasesNames;
UNICODE_STRING SampNameDomainGroupsNames;
UNICODE_STRING SampNameDomainUsersNames;
UNICODE_STRING SampCombinedAttributeName;
UNICODE_STRING SampFixedAttributeName;
UNICODE_STRING SampVariableAttributeName;
//
// A plethora of other useful characters or strings
//
UNICODE_STRING SampBackSlash; // "/"
UNICODE_STRING SampNullString; // Null string
UNICODE_STRING SampSamSubsystem; // "Security Account Manager"
UNICODE_STRING SampServerObjectName; // Name of root SamServer object
//
// Useful times
//
LARGE_INTEGER SampImmediatelyDeltaTime;
LARGE_INTEGER SampNeverDeltaTime;
LARGE_INTEGER SampHasNeverTime;
LARGE_INTEGER SampWillNeverTime;
//
// Useful encryption constants
//
LM_OWF_PASSWORD SampNullLmOwfPassword;
NT_OWF_PASSWORD SampNullNtOwfPassword;
//
// Useful Sids
//
PSID SampWorldSid;
PSID SampAnonymousSid;
PSID SampAdministratorUserSid;
PSID SampAdministratorsAliasSid;
//
// Variables for the thread that flushes changes to the registry.
//
// LastUnflushedChange - if there are no changes to be flushed, this
// has a value of "Never". If there are changes to be flushed,
// this is the time of the last change that was made. The flush
// thread will flush if a SampFlushThreadMinWaitSeconds has passed
// since the last change.
//
// FlushThreadCreated - set TRUE as soon as the flush thread is created,
// and FALSE when the thread exits. A new thread will be created
// when this is FALSE, unless FlushImmediately is TRUE.
//
// FlushImmediately - an important event has occurred, so we want to
// flush the changes immediately rather than waiting for the flush
// thread to do it. LastUnflushedChange should be set to "Never"
// so the flush thread knows it doesn't have to flush.
//
LARGE_INTEGER LastUnflushedChange;
BOOLEAN FlushThreadCreated;
BOOLEAN FlushImmediately;
//
// These should probably be #defines, but we want to play with them.
//
// SampFlushThreadMinWaitSeconds - The unit of time that the flush thread
// waits. If one of these has passed since the last unflushed change,
// the changes will be flushed.
//
// SampFlushThreadMaxWaitSeconds - If this amount of time has passed since
// the flush thread was created or last flushed, the thread will force
// a flush even if the database is still being changed.
//
// SampFlushThreadExitDelaySeconds - How long the flush thread waits
// around after a flush to see if any more changes occur. If they
// do, it starts waiting again; but if they don't, it will exit
// to keep down thread overhead.
//
LONG SampFlushThreadMinWaitSeconds;
LONG SampFlushThreadMaxWaitSeconds;
LONG SampFlushThreadExitDelaySeconds;
//
// Special SIDs
//
PSID SampBuiltinDomainSid = NULL;
PSID SampAccountDomainSid = NULL;
//
// Null token handle. This is used when clients connect via unauthenticated
// RPC instead of authenticated RPC or named pipes. Since they can't be
// authenticated, we impersonate this pre-built Null sesssion token.
//
HANDLE SampNullSessionToken;
//
// Flag indicating whether Netware server installed.
//
BOOLEAN SampNetwareServerInstalled = FALSE;
//
// Flag indicating whether to start listening on TCP/IP
//
BOOLEAN SampIpServerInstalled = FALSE;
//
// Flag indicating whether current global lock is for read or write.
// Used by dslayer routines to optimize DS transaction.
//
BOOLEAN SampWriteLock = TRUE;
//
// Buffer to store DSNAME of the Root Object in the DS
//
UCHAR RootObjectName[256];