mirror of https://github.com/lianthony/NT4.0
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
4.1 KiB
215 lines
4.1 KiB
/*++
|
|
|
|
Copyright (c) 1991-1992 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
worker.h
|
|
|
|
Abstract:
|
|
|
|
Defines and routines needed to interface with worker.c.
|
|
|
|
Author:
|
|
|
|
Madan Appiah (madana) 13-Dec-1992
|
|
|
|
Environment:
|
|
|
|
User mode only.
|
|
Contains NT-specific code.
|
|
Requires ANSI C extensions: slash-slash comments, long external names.
|
|
|
|
Revision History:
|
|
|
|
13-Dec-1992 (madana)
|
|
Created this file.
|
|
|
|
--*/
|
|
|
|
//
|
|
// worker.c will #include this file with WORKER_ALLOCATE defined.
|
|
// That will cause each of these variables to be allocated.
|
|
//
|
|
|
|
#ifdef WORKER_ALLOCATE
|
|
#define EXTERN
|
|
#else
|
|
#define EXTERN extern
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Structures and variables describing the Change Log
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
// Global Group list entry.
|
|
//
|
|
|
|
typedef struct _GLOBAL_GROUP_ENTRY {
|
|
LIST_ENTRY Next;
|
|
|
|
ULONG Rid;
|
|
} GLOBAL_GROUP_ENTRY, *PGLOBAL_GROUP_ENTRY;
|
|
|
|
//
|
|
// ChangeLog Worker queue entry.
|
|
//
|
|
|
|
typedef struct _WORKER_QUEUE_ENTRY {
|
|
LIST_ENTRY Next;
|
|
|
|
enum WORKER_QUEUE_ENTRY_TYPE {
|
|
ChangeLogAliasMembership,
|
|
ChangeLogGroupMembership,
|
|
ServersGroupDel,
|
|
ChangeLogRenameUser,
|
|
ChangeLogRenameGroup,
|
|
ChangeLogAddUser
|
|
} EntryType;
|
|
|
|
ULONG Rid;
|
|
|
|
} WORKER_QUEUE_ENTRY, *PWORKER_QUEUE_ENTRY;
|
|
|
|
//
|
|
// Changelog worker thread variables
|
|
//
|
|
|
|
EXTERN SAMPR_HANDLE NlGlobalChWorkerSamServerHandle; // Handle to Sam Server database
|
|
EXTERN LSAPR_HANDLE NlGlobalChWorkerPolicyHandle; // Handle to Policy Database
|
|
|
|
EXTERN SAM_HANDLE NlGlobalChWorkerSamDBHandle; // database handle to access SAM database
|
|
EXTERN SAM_HANDLE NlGlobalChWorkerBuiltinDBHandle; // database handle to access BUILTIN database
|
|
|
|
EXTERN PSID NlGlobalChWorkerBuiltinDomainSid; // Sid of builtin domain
|
|
EXTERN PSID NlGlobalChWorkerSamDomainSid; // Sid of sam domain
|
|
|
|
//
|
|
// Event to indicate that an entry is added to the changelog
|
|
// worker queue.
|
|
//
|
|
|
|
EXTERN HANDLE NlGlobalChangeLogWorkerQueueEvent;
|
|
|
|
//
|
|
// Queue containing the change logs for down level special group
|
|
// coversions. ChangeLog threads write entries to this queue and
|
|
// the worker thread reads entries from this thread. This queue is
|
|
// protected by NlGlobalChangeLogCritSect.
|
|
//
|
|
|
|
EXTERN LIST_ENTRY NlGlobalChangeLogWorkerQueue;
|
|
|
|
//
|
|
// List containing list of Global Groups that are members of special
|
|
// local groups such Administrator, Server Operators etc., This list
|
|
// initially built by the worker thread and then updated by the
|
|
// changelog threads. This list is also protected by
|
|
// NlGlobalChangeLogCritSect.
|
|
//
|
|
|
|
EXTERN LIST_ENTRY NlGlobalSpecialServerGroupList;
|
|
|
|
//
|
|
// Change log worker thread handle. This is projected by the
|
|
// NlGlobalChangeLogCritSect.
|
|
//
|
|
|
|
EXTERN HANDLE NlGlobalChangeLogWorkerThreadHandle;
|
|
|
|
//
|
|
// Flag to indicate the Global data that are required for change log
|
|
// worker have been initialized successfully.
|
|
//
|
|
|
|
EXTERN BOOL NlGlobalChangeLogWorkInit;
|
|
|
|
//
|
|
// Flag to stop the change log worker thread.
|
|
// Protected by the NlGlobalChangeLogCritSect.
|
|
//
|
|
|
|
EXTERN BOOL NlGlobalChangeLogWorkerTerminate;
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Procedure forwards
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
BOOLEAN
|
|
IsSpecialLocalGroup(
|
|
ULONG Rid
|
|
);
|
|
|
|
VOID
|
|
NlSimulateUserDelta(
|
|
ULONG Rid
|
|
);
|
|
|
|
NTSTATUS
|
|
NlAddWorkerQueueEntry(
|
|
enum WORKER_QUEUE_ENTRY_TYPE EntryType,
|
|
ULONG Rid
|
|
);
|
|
|
|
PGLOBAL_GROUP_ENTRY
|
|
NlGetGroupEntry(
|
|
PLIST_ENTRY GroupList,
|
|
ULONG Rid
|
|
);
|
|
|
|
NTSTATUS
|
|
NlAddGroupEntry(
|
|
PLIST_ENTRY GroupList,
|
|
ULONG Rid
|
|
);
|
|
|
|
NTSTATUS
|
|
NlAddGlobalGroupsToList(
|
|
PLIST_ENTRY GroupList,
|
|
ULONG LocalGroupID
|
|
);
|
|
|
|
NTSTATUS
|
|
NlInitSpecialGroupList(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
NlIsServersGroupEmpty(
|
|
ULONG ServersGroupRid
|
|
);
|
|
|
|
BOOLEAN
|
|
NlProcessQueueEntry(
|
|
PWORKER_QUEUE_ENTRY Entry
|
|
);
|
|
|
|
VOID
|
|
NlChangeLogWorker(
|
|
IN LPVOID ChangeLogWorkerParam
|
|
);
|
|
|
|
BOOL
|
|
NlStartChangeLogWorkerThread(
|
|
VOID
|
|
);
|
|
|
|
VOID
|
|
NlStopChangeLogWorker(
|
|
VOID
|
|
);
|
|
|
|
BOOL
|
|
IsChangeLogWorkerRunning(
|
|
VOID
|
|
);
|
|
|
|
#undef EXTERN
|
|
|
|
|