230 lines
6.2 KiB
C
230 lines
6.2 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1991 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
rmp.h
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Security Reference Monitor Private Data Types, Functions and Defines
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Scott Birrell (ScottBi) March 12, 1991
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include <nt.h>
|
|||
|
#include <ntlsa.h>
|
|||
|
#include "sep.h"
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Reference Monitor Private defines //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Used to define the bounds of the array used to track logon session
|
|||
|
// reference counts.
|
|||
|
//
|
|||
|
|
|||
|
#define SEP_LOGON_TRACK_INDEX_MASK (0x0000000FL)
|
|||
|
#define SEP_LOGON_TRACK_ARRAY_SIZE (0x00000010L)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Reference Monitor Private Macros //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
//
|
|||
|
// acquire exclusive access to a token
|
|||
|
//
|
|||
|
|
|||
|
#define SepRmAcquireDbReadLock() KeEnterCriticalRegion(); \
|
|||
|
ExAcquireResourceShared(&SepRmDbLock, TRUE)
|
|||
|
|
|||
|
#define SepRmAcquireDbWriteLock() KeEnterCriticalRegion(); \
|
|||
|
ExAcquireResourceExclusive(&SepRmDbLock, TRUE)
|
|||
|
|
|||
|
#define SepRmReleaseDbReadLock() ExReleaseResource(&SepRmDbLock); \
|
|||
|
KeLeaveCriticalRegion()
|
|||
|
|
|||
|
#define SepRmReleaseDbWriteLock() ExReleaseResource(&SepRmDbLock); \
|
|||
|
KeLeaveCriticalRegion()
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Reference Monitor Private Data Types //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
#define SEP_RM_LSA_SHARED_MEMORY_SIZE ((ULONG) PAGE_SIZE)
|
|||
|
|
|||
|
//
|
|||
|
// Reference Monitor Private Global State Data Structure
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _SEP_RM_STATE {
|
|||
|
|
|||
|
HANDLE LsaInitEventHandle;
|
|||
|
HANDLE LsaCommandPortHandle;
|
|||
|
HANDLE SepRmThreadHandle;
|
|||
|
HANDLE RmCommandPortHandle;
|
|||
|
ULONG AuditingEnabled;
|
|||
|
LSA_OPERATIONAL_MODE OperationalMode;
|
|||
|
HANDLE LsaCommandPortSectionHandle;
|
|||
|
LARGE_INTEGER LsaCommandPortSectionSize;
|
|||
|
PVOID LsaViewPortMemory;
|
|||
|
PVOID RmViewPortMemory;
|
|||
|
LONG LsaCommandPortMemoryDelta;
|
|||
|
BOOLEAN LsaCommandPortResourceInitialized;
|
|||
|
BOOLEAN LsaCommandPortActive;
|
|||
|
ERESOURCE LsaCommandPortResource;
|
|||
|
|
|||
|
} SEP_RM_STATE, *PSEP_RM_STATE;
|
|||
|
|
|||
|
//
|
|||
|
// Reference Monitor Command Port Connection Info
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _SEP_RM_CONNECT_INFO {
|
|||
|
ULONG ConnectInfo;
|
|||
|
} SEP_RM_CONNECT_INFO;
|
|||
|
|
|||
|
typedef struct SEP_RM_CONNECT_INFO *PSEP_RM_CONNECT_INFO;
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Reference Monitor Command Table Entry Format
|
|||
|
//
|
|||
|
|
|||
|
#define SEP_RM_COMMAND_MAX 4
|
|||
|
|
|||
|
typedef VOID (*SEP_RM_COMMAND_WORKER)( PRM_COMMAND_MESSAGE, PRM_REPLY_MESSAGE );
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Each logon session active in the system has a corresponding record of
|
|||
|
// the following type...
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _SEP_LOGON_SESSION_REFERENCES {
|
|||
|
struct _SEP_LOGON_SESSION_REFERENCES *Next;
|
|||
|
LUID LogonId;
|
|||
|
ULONG ReferenceCount;
|
|||
|
ULONG Flags;
|
|||
|
} SEP_LOGON_SESSION_REFERENCES, *PSEP_LOGON_SESSION_REFERENCES;
|
|||
|
|
|||
|
#define SEP_TERMINATION_NOTIFY 0x1
|
|||
|
|
|||
|
//
|
|||
|
// File systems interested in being notified when a logon session is being
|
|||
|
// terminated register a callback routine. The following data structure
|
|||
|
// describes the callback routines.
|
|||
|
//
|
|||
|
// The global list of callback routines is pointed to by SeFileSystemNotifyRoutines.
|
|||
|
// This list is protected by the RM database lock.
|
|||
|
//
|
|||
|
|
|||
|
typedef struct _SEP_LOGON_SESSION_TERMINATED_NOTIFICATION {
|
|||
|
struct _SEP_LOGON_SESSION_TERMINATED_NOTIFICATION *Next;
|
|||
|
PSE_LOGON_SESSION_TERMINATED_ROUTINE CallbackRoutine;
|
|||
|
} SEP_LOGON_SESSION_TERMINATED_NOTIFICATION, *PSEP_LOGON_SESSION_TERMINATED_NOTIFICATION;
|
|||
|
|
|||
|
extern SEP_LOGON_SESSION_TERMINATED_NOTIFICATION
|
|||
|
SeFileSystemNotifyRoutinesHead;
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Reference Monitor Private Function Prototypes //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
SepRmDbInitialization(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SepRmCommandServerThread(
|
|||
|
IN PVOID StartContext
|
|||
|
);
|
|||
|
|
|||
|
BOOLEAN SepRmCommandServerThreadInit(
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SepRmComponentTestCommandWrkr(
|
|||
|
IN PRM_COMMAND_MESSAGE CommandMessage,
|
|||
|
OUT PRM_REPLY_MESSAGE ReplyMessage
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SepRmSetAuditEventWrkr(
|
|||
|
IN PRM_COMMAND_MESSAGE CommandMessage,
|
|||
|
OUT PRM_REPLY_MESSAGE ReplyMessage
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SepRmSendCommandToLsaWrkr(
|
|||
|
IN PRM_COMMAND_MESSAGE CommandMessage,
|
|||
|
OUT PRM_REPLY_MESSAGE ReplyMessage
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SepRmCreateLogonSessionWrkr(
|
|||
|
IN PRM_COMMAND_MESSAGE CommandMessage,
|
|||
|
OUT PRM_REPLY_MESSAGE ReplyMessage
|
|||
|
);
|
|||
|
|
|||
|
VOID
|
|||
|
SepRmDeleteLogonSessionWrkr(
|
|||
|
IN PRM_COMMAND_MESSAGE CommandMessage,
|
|||
|
OUT PRM_REPLY_MESSAGE ReplyMessage
|
|||
|
) ;
|
|||
|
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
SepCreateLogonSessionTrack(
|
|||
|
IN PLUID LogonId
|
|||
|
);
|
|||
|
|
|||
|
NTSTATUS
|
|||
|
SepDeleteLogonSessionTrack(
|
|||
|
IN PLUID LogonId
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
// //
|
|||
|
// Reference Monitor Private Variables Declarations //
|
|||
|
// These variables are defined in rmvars.c //
|
|||
|
// //
|
|||
|
///////////////////////////////////////////////////////////////////////////////
|
|||
|
|
|||
|
extern PEPROCESS SepRmLsaCallProcess;
|
|||
|
extern SEP_RM_STATE SepRmState;
|
|||
|
extern ERESOURCE SepRmDbLock;
|
|||
|
extern PSEP_LOGON_SESSION_REFERENCES *SepLogonSessions;
|