windows-nt/Source/XPSP1/NT/base/fs/utils/regedit/inc/regsec.h
2020-09-26 16:20:57 +08:00

236 lines
7.2 KiB
C++

#ifndef __REGSEC_H_INCLUDED__
#define __REGSEC_H_INCLUDED__
extern "C"
{
#include "authz.h"
}
#include "objbase.h"
#include "aclapi.h"
#include "aclui.h"
//Type def for PREDEFINED KEYS
typedef enum _PREDEFINE_KEY {
PREDEFINE_KEY_CLASSES_ROOT,
PREDEFINE_KEY_CURRENT_USER,
PREDEFINE_KEY_LOCAL_MACHINE,
PREDEFINE_KEY_USERS,
PREDEFINE_KEY_CURRENT_CONFIG
} PREDEFINE_KEY;
class CSecurityInformation : public ISecurityInformation,IEffectivePermission,ISecurityObjectTypeInfo
{
private:
long m_cRef;
public:
CSecurityInformation():m_cRef(0){}
virtual ~CSecurityInformation(){};
// IUnknown methods
STDMETHOD(QueryInterface)(REFIID, LPVOID *);
STDMETHOD_(ULONG, AddRef)();
STDMETHOD_(ULONG, Release)();
// ISecurityInformation methods
STDMETHOD(GetObjectInformation)(
IN PSI_OBJECT_INFO pObjectInfo
) = 0;
STDMETHOD(GetSecurity)(
IN SECURITY_INFORMATION RequestedInformation,
OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
IN BOOL fDefault
) = 0;
STDMETHOD(SetSecurity)(
IN SECURITY_INFORMATION SecurityInformation,
IN PSECURITY_DESCRIPTOR pSecurityDescriptor
) = 0;
STDMETHOD(GetAccessRights)(
const GUID *pguidObjectType,
DWORD dwFlags,
PSI_ACCESS *ppAccess,
ULONG *pcAccesses,
ULONG *piDefaultAccess
) = 0;
STDMETHOD(MapGeneric)(
const GUID *pguidObjectType,
UCHAR *pAceFlags,
ACCESS_MASK *pMask
) = 0;
STDMETHOD(GetInheritTypes)(
PSI_INHERIT_TYPE *ppInheritTypes,
ULONG *pcInheritTypes
) = 0;
STDMETHOD(PropertySheetPageCallback)(
HWND hwnd,
UINT uMsg,
SI_PAGE_TYPE uPage
) = 0;
STDMETHOD(GetEffectivePermission) ( const GUID* pguidObjectType,
PSID pUserSid,
LPCWSTR pszServerName,
PSECURITY_DESCRIPTOR pSD,
POBJECT_TYPE_LIST *ppObjectTypeList,
ULONG *pcObjectTypeListLength,
PACCESS_MASK *ppGrantedAccessList,
ULONG *pcGrantedAccessListLength) =0;
STDMETHOD(GetInheritSource)(SECURITY_INFORMATION si,
PACL pACL,
PINHERITED_FROM *ppInheritArray) PURE;
};
class CKeySecurityInformation : public CSecurityInformation
{
private:
//Name of the Key, NULL for ROOT key
LPCWSTR m_strKeyName;
//Name of the parent Key, NULL for root and immediate child of root.
LPCWSTR m_strParentName;
//Name of the server, can be NULL
LPCWSTR m_strMachineName;
//Title of the page
LPCWSTR m_strPageTitle;
//if connected to Remote System, Machine name must not be null in this case
BOOL m_bRemote;
PREDEFINE_KEY m_PredefinedKey;
BOOL m_bReadOnly;
//Handle to predefined key. If handle to remote registry, close in Destructor
HKEY m_hkeyPredefinedKey;
LPWSTR m_strCompleteName ; //Free in Destructor
DWORD m_dwFlags;
//This HWND to application window
HWND m_hWnd;
//This is HWND to currently infocus ACLUI property Sheet. Null if none
HWND m_hWndProperty;
AUTHZ_RESOURCE_MANAGER_HANDLE m_ResourceManager; //Used for access check
AUTHZ_RESOURCE_MANAGER_HANDLE GetAUTHZ_RM(){ return m_ResourceManager; }
HWND GetInFocusHWnd() { return m_hWndProperty? m_hWndProperty : m_hWnd; }
public:
CKeySecurityInformation(): m_strKeyName(NULL),m_strParentName(NULL),
m_strMachineName(NULL), m_strPageTitle(NULL),
m_bRemote(false),m_PredefinedKey((PREDEFINE_KEY)0),
m_bReadOnly(false),m_strCompleteName(NULL),
m_hWnd(NULL), m_hWndProperty(NULL),
m_ResourceManager(NULL){}
~CKeySecurityInformation();
public:
// *** ISecurityInformation methods ***
STDMETHOD(GetObjectInformation) (PSI_OBJECT_INFO pObjectInfo );
STDMETHOD(GetSecurity)(
IN SECURITY_INFORMATION RequestedInformation,
OUT PSECURITY_DESCRIPTOR *ppSecurityDescriptor,
IN BOOL fDefault
);
STDMETHOD(SetSecurity)(
IN SECURITY_INFORMATION SecurityInformation,
IN PSECURITY_DESCRIPTOR pSecurityDescriptor
);
STDMETHOD(GetAccessRights)(
const GUID *pguidObjectType,
DWORD dwFlags,
PSI_ACCESS *ppAccess,
ULONG *pcAccesses,
ULONG *piDefaultAccess
);
STDMETHOD(MapGeneric)(
const GUID *pguidObjectType,
UCHAR *pAceFlags,
ACCESS_MASK *pMask
);
STDMETHOD(GetInheritTypes)(
PSI_INHERIT_TYPE *ppInheritTypes,
ULONG *pcInheritTypes
);
STDMETHOD(PropertySheetPageCallback)(
HWND hwnd,
UINT uMsg,
SI_PAGE_TYPE uPage
);
STDMETHOD(GetEffectivePermission) ( const GUID* pguidObjectType,
PSID pUserSid,
LPCWSTR pszServerName,
PSECURITY_DESCRIPTOR pSD,
POBJECT_TYPE_LIST *ppObjectTypeList,
ULONG *pcObjectTypeListLength,
PACCESS_MASK *ppGrantedAccessList,
ULONG *pcGrantedAccessListLength) ;
STDMETHOD(GetInheritSource)(SECURITY_INFORMATION si,
PACL pACL,
PINHERITED_FROM *ppInheritArray);
HRESULT Initialize ( LPCWSTR strKeyName,
LPCWSTR strParentName,
LPCWSTR strMachineName,
LPCWSTR strPageTitle,
BOOL bRemote,
PREDEFINE_KEY PredefinedKey,
BOOL bReadOnly,
HWND hWnd);
protected:
HRESULT SetCompleteName();
LPCWSTR GetCompleteName(){ return m_strCompleteName; }
LPCWSTR GetCompleteName1();
HRESULT SetHandleToPredefinedKey();
STDMETHOD(WriteObjectSecurity)(
LPCTSTR pszObject,
SECURITY_INFORMATION si,
PSECURITY_DESCRIPTOR pSD
);
STDMETHOD(WriteObjectSecurity)(
HKEY hkey,
SECURITY_INFORMATION si,
PSECURITY_DESCRIPTOR pSD
);
HRESULT SetSubKeysSecurity(
HKEY hkey,
SECURITY_INFORMATION si,
PSECURITY_DESCRIPTOR pSD,
LPBOOL pbNotAllApplied,
bool bFirstCall
);
HRESULT OpenKey(
DWORD Permission,
PHKEY pKey
);
};
//
HRESULT CreateSecurityInformation( IN LPCWSTR strKeyName,
IN LPCWSTR strParentName,
IN LPCWSTR strMachineName,
IN LPCWSTR strPageTitle,
IN BOOL bRemote,
IN PREDEFINE_KEY PredefinedKey,
IN BOOL bReadOnly,
IN HWND hWnd,
OUT LPSECURITYINFO *pSi);
BOOL DisplayMessage( HWND hWnd,
HINSTANCE hInstance,
DWORD dwMessageId,
DWORD dwCaptionId );
#endif // ~__PERMPAGE_H_INCLUDED__