|
|
/*++
Copyright (c) 1991-1997 Microsoft Corporation
Module Name:
changelg.h
Abstract:
Defines and routines needed to interface with changelg.c. Read the comments in the abstract for changelg.c to determine the restrictions on the use of that module.
Author:
Cliff Van Dyke (cliffv) 07-May-1992
Environment:
User mode only. Contains NT-specific code. Requires ANSI C extensions: slash-slash comments, long external names.
Revision History:
02-Jan-1992 (madana) added support for builtin/multidomain replication.
--*/
#if ( _MSC_VER >= 800 )
#pragma warning ( 3 : 4100 ) // enable "Unreferenced formal parameter"
#pragma warning ( 3 : 4219 ) // enable "trailing ',' used for variable argument list"
#endif
#define DS_VALID_SERVICE_BITS ( DS_WRITABLE_FLAG | DS_KDC_FLAG | DS_DS_FLAG | DS_TIMESERV_FLAG | DS_GC_FLAG | DS_GOOD_TIMESERV_FLAG)
#define DS_OUTOFPROC_VALID_SERVICE_BITS ( DS_TIMESERV_FLAG | DS_GOOD_TIMESERV_FLAG )
#define DS_DNS_SERVICE_BITS ( DS_KDC_FLAG | DS_GC_FLAG | DS_DS_FLAG )
/////////////////////////////////////////////////////////////////////////////
//
// Structures and variables describing the Change Log
//
/////////////////////////////////////////////////////////////////////////////
//
// Change log entry is a variable length record, the variable fields SID and
// ObjectName will follow the structure.
//
typedef struct _CHANGELOG_ENTRY_V3 { LARGE_INTEGER SerialNumber; // always align this on 8 byte boundary
DWORD Size; USHORT DeltaType; UCHAR DBIndex; UCHAR ReplicateImmediately;
ULONG ObjectRid; USHORT ObjectSidOffset; USHORT ObjectNameOffset; // null terminated unicode string
} CHANGELOG_ENTRY_V3, *PCHANGELOG_ENTRY_V3;
typedef struct _CHANGELOG_ENTRY { LARGE_INTEGER SerialNumber; // always align this on 8 byte boundary
ULONG ObjectRid;
USHORT Flags; #define CHANGELOG_SID_SPECIFIED 0x04
#define CHANGELOG_NAME_SPECIFIED 0x08
#define CHANGELOG_PDC_PROMOTION 0x10
//
// The following bits were used in NT 4.0. Avoid them if at all possible
#define CHANGELOG_REPLICATE_IMMEDIATELY 0x01
#define CHANGELOG_PASSWORD_CHANGE 0x02
#define CHANGELOG_PREVIOUSLY_USED_BITS 0x23
UCHAR DBIndex; UCHAR DeltaType;
} CHANGELOG_ENTRY, *PCHANGELOG_ENTRY;
//
// List of changes the netlogon needs to be aware of.
//
typedef struct _CHANGELOG_NOTIFICATION { LIST_ENTRY Next;
enum CHANGELOG_NOTIFICATION_TYPE { ChangeLogTrustAccountAdded, // ObjectName/ObjectRid specified
ChangeLogTrustAccountDeleted, // ObjectName specified
ChangeLogTrustAdded, // ObjectSid specified
ChangeLogTrustDeleted, // ObjectSid specified
ChangeLogRoleChanged, // Role of the LSA changed
ChangeDnsNames, // DNS names should change
ChangeLogDsChanged, // Sundry DS information changed
ChangeLogLsaPolicyChanged, // Sundry LSA Policy information changed
ChangeLogNtdsDsaDeleted // NTDS-DSA object deleted
} EntryType;
UNICODE_STRING ObjectName;
PSID ObjectSid;
ULONG ObjectRid;
GUID ObjectGuid;
GUID DomainGuid;
UNICODE_STRING DomainName;
} CHANGELOG_NOTIFICATION, *PCHANGELOG_NOTIFICATION;
//
// To serialize change log access
//
#define LOCK_CHANGELOG() EnterCriticalSection( &NlGlobalChangeLogCritSect )
#define UNLOCK_CHANGELOG() LeaveCriticalSection( &NlGlobalChangeLogCritSect )
//
// Index to supported data bases.
//
#define SAM_DB 0 // index to SAM database structure
#define BUILTIN_DB 1 // index to BUILTIN database structure
#define LSA_DB 2 // index to LSA database
#define VOID_DB 3 // index to unused database (used to mark changelog
// entry as invalid)
#define NUM_DBS 3 // number of databases supported
//
// Netlogon started flag, used by the changelog to determine the
// netlogon service is successfully started and initialization
// completed.
//
typedef enum { NetlogonStopped, NetlogonStarting, NetlogonStarted } _CHANGELOG_NETLOGON_STATE;
//
// Role of the machine from the changelog's perspective.
//
typedef enum _CHANGELOG_ROLE { ChangeLogPrimary, ChangeLogBackup, ChangeLogMemberWorkstation, ChangeLogUnknown } CHANGELOG_ROLE;
/////////////////////////////////////////////////////////////////////////////
//
// Procedure forwards
//
/////////////////////////////////////////////////////////////////////////////
NTSTATUS NlInitChangeLog( VOID );
NTSTATUS NlCloseChangeLog( VOID );
NTSTATUS NetpNotifyRole ( IN POLICY_LSA_SERVER_ROLE Role );
DWORD NlBackupChangeLogFile( VOID );
NET_API_STATUS NlpFreeNetlogonDllHandles ( VOID );
NTSTATUS NlSendChangeLogNotification( IN enum CHANGELOG_NOTIFICATION_TYPE EntryType, IN PUNICODE_STRING ObjectName, IN PSID ObjectSid, IN ULONG ObjectRid, IN GUID *ObjectGuid, IN GUID *DomainGuid, IN PUNICODE_STRING DomainName );
VOID NlWaitForChangeLogBrowserNotify( VOID );
|