mirror of https://github.com/tongzx/nt5src
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.
183 lines
5.7 KiB
183 lines
5.7 KiB
//+-------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1996 - 1996.
|
|
//
|
|
// File: ntprov.hxx
|
|
//
|
|
// Contents: Private header for the NT Marta provider
|
|
//
|
|
// History: 22-Jul-96 MacM Created
|
|
//
|
|
//--------------------------------------------------------------------
|
|
#ifndef __NTPROV_HXX__
|
|
#define __NTPROV_HXX__
|
|
|
|
//
|
|
// Extern definitions
|
|
//
|
|
extern CSList gWrkrList;
|
|
|
|
extern "C"
|
|
{
|
|
extern RTL_RESOURCE gWrkrLock;
|
|
extern RTL_RESOURCE gCacheLock;
|
|
extern RTL_RESOURCE gLocalSidCacheLock;
|
|
extern HINSTANCE ghDll;
|
|
}
|
|
|
|
//
|
|
// These are the flags to pass in to the worker threads
|
|
//
|
|
#define NTMARTA_DELETE_ARGS 0x00000001 // Wrkr should delete its
|
|
// argument structure
|
|
#define NTMARTA_DELETE_ALIST 0x00000002 // Wrkr should delete the
|
|
// class pointer
|
|
#define NTMARTA_HANDLE_VALID 0x00000004 // The passed in handle
|
|
// should be used
|
|
|
|
//
|
|
// Number entries in the last success access cache.
|
|
//
|
|
#define MAX_ACCESS_ENTRIES 5
|
|
|
|
//
|
|
// The time to wait before killing a thread
|
|
//
|
|
#define THREAD_KILL_WAIT 1000
|
|
|
|
//
|
|
// This structure is used to hold info about the last successfully accessed
|
|
// paths
|
|
//
|
|
typedef struct _NTMARTA_ACCESS_CACHE
|
|
{
|
|
SE_OBJECT_TYPE ObjectType;
|
|
ULONG cLen;
|
|
WCHAR wszPath[MAX_PATH + 1];
|
|
} NTMARTA_ACCESS_CACHE, *PNTMARTA_ACCESS_CACHE;
|
|
|
|
//
|
|
// This structure is used to maintain information about the worker thread
|
|
//
|
|
typedef struct _NTMARTA_WRKR_INFO
|
|
{
|
|
PACTRL_OVERLAPPED pOverlapped;
|
|
HANDLE hWorker;
|
|
ULONG fState; // Non-zero state means STOP!
|
|
ULONG cProcessed; // Number of items processed
|
|
} NTMARTA_WRKR_INFO, *PNTMARTA_WRKR_INFO;
|
|
|
|
//
|
|
// This structure gets passed in to the SetAccess/GrantAccess worker threads
|
|
//
|
|
typedef struct _NTMARTA_SET_WRKR_INFO
|
|
{
|
|
PNTMARTA_WRKR_INFO pWrkrInfo;
|
|
PWSTR *ppwszObjectList;
|
|
ULONG cObjects;
|
|
HANDLE hObject;
|
|
SE_OBJECT_TYPE ObjectType;
|
|
CAccessList *pAccessList;
|
|
ULONG fFlags;
|
|
} NTMARTA_SET_WRKR_INFO, *PNTMARTA_SET_WRKR_INFO;
|
|
|
|
//
|
|
// This is used by the Revoke worker threads
|
|
//
|
|
typedef struct _NTMARTA_RVK_WRKR_INFO
|
|
{
|
|
PNTMARTA_WRKR_INFO pWrkrInfo;
|
|
PWSTR pwszObject;
|
|
SE_OBJECT_TYPE ObjectType;
|
|
ULONG cTrustees;
|
|
PTRUSTEE prgTrustees;
|
|
} NTMARTA_RVK_WRKR_INFO, *PNTMARTA_RVK_WRKR_INFO;
|
|
|
|
|
|
|
|
//
|
|
// Private function prototypes
|
|
//
|
|
VOID
|
|
NtProvFreeWorkerItem(IN PVOID pv);
|
|
|
|
BOOL
|
|
NtProvFindWorkerItem(IN PVOID pv1, // Data passed in
|
|
IN PVOID pv2); // Data from list
|
|
|
|
BOOL
|
|
NtProvFindTempPropItem(IN PVOID pv1, // Data passed in
|
|
IN PVOID pv2); // Data from list
|
|
|
|
|
|
DWORD
|
|
NtProvGetBasePathsForFilePath(IN PWSTR pwszObject,
|
|
IN SE_OBJECT_TYPE ObjectType,
|
|
OUT PULONG pcPaths,
|
|
OUT PWSTR **pppwszBasePaths);
|
|
|
|
DWORD
|
|
NtProvGetAccessListForObject(IN PWSTR pwszObject,
|
|
IN SE_OBJECT_TYPE ObjectType,
|
|
IN PACTRL_RIGHTS_INFO pRightsInfo,
|
|
IN ULONG cProps,
|
|
OUT CAccessList **ppAccessList);
|
|
|
|
DWORD
|
|
NtProvGetAccessListForHandle(IN HANDLE hObject,
|
|
IN SE_OBJECT_TYPE ObjectType,
|
|
IN PACTRL_RIGHTS_INFO pRightsInfo,
|
|
IN ULONG cProps,
|
|
OUT CAccessList **ppAccessList);
|
|
|
|
|
|
extern "C"
|
|
{
|
|
BOOL
|
|
IsThisADfsPath(IN LPCWSTR pwszPath,
|
|
IN DWORD cwPath OPTIONAL);
|
|
}
|
|
|
|
DWORD
|
|
NtProvDoSet(IN LPCWSTR pwszObjectPath,
|
|
IN SE_OBJECT_TYPE ObjectType,
|
|
IN CAccessList *pAccessList,
|
|
IN PACTRL_OVERLAPPED pOverlapped,
|
|
IN DWORD fSetFlags);
|
|
|
|
DWORD
|
|
NtProvDoHandleSet(IN HANDLE hObject,
|
|
IN SE_OBJECT_TYPE ObjectType,
|
|
IN CAccessList *pAccessList,
|
|
IN PACTRL_OVERLAPPED pOverlapped,
|
|
IN DWORD fSetFlags);
|
|
|
|
|
|
DWORD
|
|
NtProvSetRightsList(IN OPTIONAL PACTRL_ACCESS pAccessList,
|
|
IN OPTIONAL PACTRL_AUDIT pAuditList,
|
|
OUT PULONG pcItems,
|
|
OUT PACTRL_RIGHTS_INFO *ppRightsList);
|
|
|
|
DWORD
|
|
AccProvpDoTrusteeAccessCalculations(IN CAccessList *pAccList,
|
|
IN PTRUSTEE pTrustee,
|
|
IN OUT PTRUSTEE_ACCESS pTrusteeAccess);
|
|
|
|
DWORD
|
|
AccProvpDoAccessAuditedCalculations(IN CAccessList *pAccList,
|
|
IN LPCWSTR pwszProperty,
|
|
IN PTRUSTEE pTrustee,
|
|
IN ACCESS_RIGHTS ulAuditRights,
|
|
OUT PBOOL pfAuditedSuccess,
|
|
OUT PBOOL pfAuditedFailure);
|
|
|
|
|
|
//
|
|
// Worker threads
|
|
//
|
|
DWORD
|
|
NtProvSetAccessRightsWorkerThread(IN PVOID pWorkerArgs);
|
|
#endif
|
|
|