/*++ Copyright (c) 1996 Microsoft Corporation Module Name: dsacls.h Abstract: The main header file for the dsacls tool Author: Mac McLain (MacM) 10-02-96 Environment: User Mode Revision History: --*/ #ifndef _DSACLS_H #define _DSACLS_H #include #include "accctrl.h" #define FLAG_ON(flags,bit) ((flags) & (bit)) //Some Error Checking Macros #define CHECK_NULL( ptr, jump_loc ) \ if( ptr == NULL ) \ { \ dwErr = ERROR_NOT_ENOUGH_MEMORY; \ goto jump_loc; \ } #define CHECK_HR( hr, jump_loc ) \ if( hr != S_OK ) \ { \ dwErr = HRESULT_CODE( hr ); \ goto jump_loc; \ } \ // // Local prototypes // #if DSACL_DBG ULONG gfDebug; #endif // // Type of operation to perform // typedef enum _DSACLS_OP { REVOKE = 0, GRANT, DENY } DSACLS_OP; #define DSACLS_EXTRA_INFO_NONE 0 #define DSACLS_EXTRA_INFO_REQUIRED 1 #define DSACLS_EXTRA_INFO_OPTIONAL 2 typedef struct _DSACLS_ARG { ULONG ResourceId; PWSTR String; ULONG Length; ULONG StartIndex; ULONG Flag; ULONG SkipCount; BOOLEAN SkipNonFlag; WORD ExtraInfo; } DSACLS_ARG, *PDSACLS_ARG; typedef struct _DSACLS_INHERIT { ULONG ResourceId; PWSTR String; ULONG Length; BOOLEAN ValidForInput; ULONG InheritFlag; } DSACLS_INHERIT, *PDSACLS_INHERIT; typedef struct _DSACLS_RIGHTS { ULONG ResourceId; PWSTR String; ULONG ResourceIdEx; PWSTR StringEx; ULONG Length; ULONG Right; } DSACLS_RIGHTS, *PDSACLS_RIGHTS; typedef struct _DSACLS_PROTECT { ULONG ResourceId; PWSTR String; ULONG Length; ULONG Right; } DSACLS_PROTECT, *PDSACLS_PROTECT; extern LPWSTR g_szSchemaNamingContext; extern LPWSTR g_szConfigurationNamingContext; extern HMODULE g_hInstance; extern LPWSTR g_szServerName; extern CCache *g_Cache; // // Prototypes from dsacls.c // DWORD InitializeGlobalArrays(); DWORD ConvertArgvToUnicode( LPWSTR * wargv, char ** argv, int argc ) ; DWORD WriteObjectSecurity( IN LPWSTR pszObject, IN SECURITY_INFORMATION si, IN PSECURITY_DESCRIPTOR pSD ); // // prototypes from refresh.c // DWORD SetDefaultSecurityOnObjectTree( IN PWSTR ObjectPath, IN BOOLEAN Propagate, IN SECURITY_INFORMATION Protection ); void MapGeneric( ACCESS_MASK * pMask ); void DisplayAccessRights( UINT nSpace, ACCESS_MASK m_Mask ); void ConvertAccessMaskToGenericString( ACCESS_MASK m_Mask, LPWSTR szLoadBuffer, UINT nBuffer ); DWORD BuildExplicitAccess( IN PSID pSid, IN GUID* pGuidObject, IN GUID* pGuidInherit, IN ACCESS_MODE AccessMode, IN ULONG Access, IN ULONG Inheritance, OUT PEXPLICIT_ACCESS pExplicitAccess ); DWORD ParseUserAndPermissons( IN LPWSTR pszArgument, IN DSACLS_OP Op, IN ULONG RightsListCount, IN PDSACLS_RIGHTS RightsList, OUT LPWSTR * ppszTrusteeName, OUT PULONG pAccess, OUT LPWSTR * ppszObjectId, OUT LPWSTR * ppszInheritId ); // // Define the rights used in the DS // #define RIGHT_DS_CREATE_CHILD ACTRL_DS_CREATE_CHILD #define RIGHT_DS_DELETE_CHILD ACTRL_DS_DELETE_CHILD #define RIGHT_DS_DELETE_SELF DELETE #define RIGHT_DS_LIST_CONTENTS ACTRL_DS_LIST #define RIGHT_DS_WRITE_PROPERTY_EXTENDED ACTRL_DS_SELF #define RIGHT_DS_READ_PROPERTY ACTRL_DS_READ_PROP #define RIGHT_DS_WRITE_PROPERTY ACTRL_DS_WRITE_PROP #define RIGHT_DS_DELETE_TREE ACTRL_DS_DELETE_TREE #define RIGHT_DS_LIST_OBJECT ACTRL_DS_LIST_OBJECT #ifndef ACTRL_DS_CONTROL_ACCESS #define ACTRL_DS_CONTROL_ACCESS ACTRL_PERM_9 #endif #define RIGHT_DS_CONTROL_ACCESS ACTRL_DS_CONTROL_ACCESS // // Define the generic rights // // generic read #define GENERIC_READ_MAPPING ((STANDARD_RIGHTS_READ) | \ (RIGHT_DS_LIST_CONTENTS) | \ (RIGHT_DS_READ_PROPERTY) | \ (RIGHT_DS_LIST_OBJECT)) // generic execute #define GENERIC_EXECUTE_MAPPING ((STANDARD_RIGHTS_EXECUTE) | \ (RIGHT_DS_LIST_CONTENTS)) // generic right #define GENERIC_WRITE_MAPPING ((STANDARD_RIGHTS_WRITE) | \ (RIGHT_DS_WRITE_PROPERTY_EXTENDED) | \ (RIGHT_DS_WRITE_PROPERTY)) // generic all #define GENERIC_ALL_MAPPING ((STANDARD_RIGHTS_REQUIRED) | \ (RIGHT_DS_CREATE_CHILD) | \ (RIGHT_DS_DELETE_CHILD) | \ (RIGHT_DS_DELETE_TREE) | \ (RIGHT_DS_READ_PROPERTY) | \ (RIGHT_DS_WRITE_PROPERTY) | \ (RIGHT_DS_LIST_CONTENTS) | \ (RIGHT_DS_LIST_OBJECT) | \ (RIGHT_DS_CONTROL_ACCESS) | \ (RIGHT_DS_WRITE_PROPERTY_EXTENDED)) // // Standard DS generic access rights mapping // #define DS_GENERIC_MAPPING {GENERIC_READ_MAPPING, \ GENERIC_WRITE_MAPPING, \ GENERIC_EXECUTE_MAPPING, \ GENERIC_ALL_MAPPING} #endif