//+------------------------------------------------------------------- // // 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