27 DEFINE_GUID(IID_IRegKeySecurity, 0x965fc360, 0x16ff, 0x11d0, 0x0091, 0xcb,0x00,0xaa,0x00,0xbb,0xb7,0x23);
28 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2 29 DEFINE_GUID(IID_IRegKeySecurity2, 0xc3ccfdb4, 0x6f88, 0x11d2, 0x00a3, 0xce,0x00,0xc0,0x4f,0xb1,0x78,0x2a);
34 #pragma message ("INVESTIGATE ME") 37 #if 1 //#ifndef _MSC_VER 38 DEFINE_GUID(IID_IEffectivePermission, 0x3853dc76, 0x9f35, 0x407c, 0x0088, 0xa1,0xd1,0x93,0x44,0x36,0x5f,0xbc);
39 DEFINE_GUID(IID_ISecurityObjectTypeInfo, 0xfc3066eb, 0x79ef, 0x444b, 0x0091, 0x11,0xd1,0x8a,0x75,0xeb,0xf2,0xfa);
50 lpISecurityInformationVtbl));
53 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2 55 impl_from_ISecurityInformation2(
struct ISecurityInformation2 *iface)
58 lpISecurityInformation2Vtbl));
66 lpISecurityObjectTypeInfoVtbl));
73 lpIEffectivePermissionVtbl));
76 #define impl_to_interface(impl,iface) (struct iface *)(&(impl)->lp##iface##Vtbl) 108 &IID_IRegKeySecurity))
111 ISecurityInformation);
113 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2 115 &IID_IRegKeySecurity2))
118 ISecurityInformation2);
122 &IID_IEffectivePermission))
125 IEffectivePermission);
128 &IID_ISecurityObjectTypeInfo))
131 ISecurityObjectTypeInfo);
180 const GUID* pguidObjectType,
184 ULONG* piDefaultAccess);
188 const GUID* pguidObjectType,
195 ULONG* pcInheritTypes);
219 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2 226 ISecurityInformation2_fnQueryInterface(
struct ISecurityInformation2 *
this,
231 ISecurityInformation2_fnAddRef(
struct ISecurityInformation2 *
this);
234 ISecurityInformation2_fnRelease(
struct ISecurityInformation2 *
this);
238 ISecurityInformation2_fnIsDaclCanonical(
struct ISecurityInformation2 *
this,
242 ISecurityInformation2_fnLookupSids(
struct ISecurityInformation2 *
this,
247 static const struct ifaceISecurityInformation2Vbtl vtblISecurityInformation2 =
250 ISecurityInformation2_fnQueryInterface,
251 ISecurityInformation2_fnAddRef,
252 ISecurityInformation2_fnRelease,
255 ISecurityInformation2_fnIsDaclCanonical,
256 ISecurityInformation2_fnLookupSids
279 const GUID* pguidObjectType,
284 ULONG* pcObjectTypeListLength,
286 ULONG* pcGrantedAccessListLength);
320 PINHERITED_FROM* ppInheritArray);
404 *pObjectInfo =
obj->ObjectInfo;
419 RequestedInformation,
424 ppSecurityDescriptor);
443 const GUID* pguidObjectType,
447 ULONG* piDefaultAccess)
457 const GUID* pguidObjectType,
470 ULONG* pcInheritTypes)
494 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2 500 ISecurityInformation2_fnQueryInterface(
struct ISecurityInformation2 *
this,
508 ISecurityInformation2_fnAddRef(
this);
518 ISecurityInformation2_fnAddRef(
struct ISecurityInformation2 *
this)
524 ISecurityInformation2_fnRelease(
struct ISecurityInformation2 *
this)
530 ISecurityInformation2_fnIsDaclCanonical(
struct ISecurityInformation2 *
this,
538 ISecurityInformation2_fnLookupSids(
struct ISecurityInformation2 *
this,
584 const GUID* pguidObjectType,
589 ULONG* pcObjectTypeListLength,
591 ULONG* pcGrantedAccessListLength)
600 *ppObjectTypeList = &DefObjTypeList;
601 *pcObjectTypeListLength = 1;
613 if (GrantedAccessList ==
NULL)
623 *ppGrantedAccessList = GrantedAccessList;
624 *pcGrantedAccessListLength = 1;
677 PINHERITED_FROM pif, pif2;
709 if (pif[
i].AncestorName !=
NULL)
711 pifSize += (
wcslen(pif[
i].AncestorName) + 1) *
sizeof(
WCHAR);
730 pif2[
i].GenerationGap = pif[
i].GenerationGap;
731 if (pif[
i].AncestorName !=
NULL)
733 pif2[
i].AncestorName = lpBuf;
735 pif[
i].AncestorName);
736 lpBuf +=
wcslen(pif[
i].AncestorName) + 1;
739 pif2[
i].AncestorName =
NULL;
772 szRegKey[
wcslen(lpRegKey) + 1]));
777 #if REGEDIT_IMPLEMENT_ISECURITYINFORMATION2 778 obj->lpISecurityInformation2Vtbl = &vtblISecurityInformation2;
782 obj->ObjectInfo = *ObjectInfo;
784 obj->hRootKey = hRootKey;
805 struct ISecurityInformation *psi);
849 size_t lnMachine = 0, lnKeyName = 0;
856 if (lpMachine !=
NULL)
857 lnMachine =
wcslen(lpMachine);
858 if (lpKeyName !=
NULL)
859 lnKeyName =
wcslen(lpKeyName);
862 if (lpMachine !=
NULL &&
863 (lpMachine[0] ==
L'\0' ||
864 (lpMachine[0] ==
L'.' && lpMachine[1] ==
L'.')))
870 lphKey =
L"CLASSES_ROOT";
872 lphKey =
L"CURRENT_USER";
884 (2 + lnMachine + 1 +
wcslen(lphKey) + 1 + lnKeyName) *
sizeof(
WCHAR));
885 if (lpKeyPath ==
NULL)
890 lpKeyPath[0] =
L'\0';
904 if (lpKeyName !=
NULL && lpKeyName[0] !=
L'\0')
906 if (lpKeyName[0] !=
L'\\')
934 ISecurityInformation));
940 if (lpKeyPath !=
NULL)
VOID WINAPI MapGenericMask(PDWORD, PGENERIC_MAPPING)
DWORD WINAPI GetNamedSecurityInfoW(LPWSTR pObjectName, SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo, PSID *ppsidOwner, PSID *ppsidGroup, PACL *ppDacl, PACL *ppSacl, PSECURITY_DESCRIPTOR *ppSecurityDescriptor)
static const DWORD RegDefaultAccess
static HRESULT STDMETHODCALLTYPE ISecurityObjectTypeInfo_fnQueryInterface(struct ISecurityObjectTypeInfo *this, REFIID iid, PVOID *pvObject)
_In_ NDIS_ERROR_CODE ErrorCode
#define HRESULT_FROM_WIN32(x)
static __inline PCRegKeySecurity impl_from_ISecurityObjectTypeInfo(struct ISecurityObjectTypeInfo *iface)
_In_ BOOLEAN _In_opt_ PACL _In_opt_ BOOLEAN DaclDefaulted
static HRESULT STDMETHODCALLTYPE ISecurityObjectTypeInfo_fnGetInheritSource(struct ISecurityObjectTypeInfo *this, SECURITY_INFORMATION si, PACL pACL, PINHERITED_FROM *ppInheritArray)
DWORD WINAPI GetInheritanceSourceW(LPWSTR pObjectName, SE_OBJECT_TYPE ObjectType, SECURITY_INFORMATION SecurityInfo, BOOL Container, GUID **pObjectClassGuids OPTIONAL, DWORD GuidCount, PACL pAcl, PFN_OBJECT_MGR_FUNCTS pfnArray OPTIONAL, PGENERIC_MAPPING pGenericMapping, PINHERITED_FROMW pInheritArray)
static const struct ifaceISecurityObjectTypeInfoVbtl vtblISecurityObjectTypeInfo
#define IDS_ACCESS_QUERYVALUE
#define impl_to_interface(impl, iface)
#define SI_RESET_SACL_TREE
static HRESULT STDMETHODCALLTYPE IEffectivePermission_fnQueryInterface(struct IEffectivePermission *this, REFIID iid, PVOID *pvObject)
BOOL InitializeAclUiDll(VOID)
#define IDS_INHERIT_THISKEYANDSUBKEYS
#define HKEY_CURRENT_USER
#define IDS_ACCESS_NOTIFY
#define BuildTrusteeWithSid
SECURITY_INFORMATION PACL pACL
#define IDS_ACCESS_WRITEDAC
static const struct ifaceIEffectivePermissionVbtl vtblIEffectivePermission
#define IDS_ACCESS_CREATESUBKEY
#define ERROR_NOT_ENOUGH_MEMORY
DWORD WINAPI GetLastError(VOID)
enum _SI_PAGE_TYPE SI_PAGE_TYPE
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnMapGeneric(struct ISecurityInformation *this, const GUID *pguidObjectType, UCHAR *pAceFlags, ACCESS_MASK *pMask)
#define HKEY_CURRENT_CONFIG
SECURITY_INFORMATION PACL PINHERITED_FROM * ppInheritArray
#define IDS_ACCESS_SETVALUE
GLsizei GLsizei GLuint * obj
#define IDS_ACCESS_READCONTROL
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnGetAccessRights(struct ISecurityInformation *this, const GUID *pguidObjectType, DWORD dwFlags, PSI_ACCESS *ppAccess, ULONG *pcAccesses, ULONG *piDefaultAccess)
static ULONG STDMETHODCALLTYPE ISecurityObjectTypeInfo_fnAddRef(struct ISecurityObjectTypeInfo *this)
struct _CHANGE_CONTEXT * PCHANGE_CONTEXT
DWORD WINAPI FreeInheritedFromArray(PINHERITED_FROMW pInheritArray, USHORT AceCnt, PFN_OBJECT_MGR_FUNCTS pfnArray OPTIONAL)
#define IDS_ACCESS_CREATELINK
static ULONG STDMETHODCALLTYPE IEffectivePermission_fnAddRef(struct IEffectivePermission *this)
DWORD SECURITY_INFORMATION
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnSetSecurity(struct ISecurityInformation *this, SECURITY_INFORMATION RequestedInformation, PSECURITY_DESCRIPTOR pSecurityDescriptor)
static HRESULT STDMETHODCALLTYPE IEffectivePermission_fnGetEffectivePermission(struct IEffectivePermission *this, const GUID *pguidObjectType, PSID pUserSid, LPCWSTR pszServerName, PSECURITY_DESCRIPTOR pSD, POBJECT_TYPE_LIST *ppObjectTypeList, ULONG *pcObjectTypeListLength, PACCESS_MASK *ppGrantedAccessList, ULONG *pcGrantedAccessListLength)
#define SI_ACCESS_SPECIFIC
_At_(*)(_In_ PWSK_CLIENT Client, _In_opt_ PUNICODE_STRING NodeName, _In_opt_ PUNICODE_STRING ServiceName, _In_opt_ ULONG NameSpace, _In_opt_ GUID *Provider, _In_opt_ PADDRINFOEXW Hints, _Outptr_ PADDRINFOEXW *Result, _In_opt_ PEPROCESS OwningProcess, _In_opt_ PETHREAD OwningThread, _Inout_ PIRP Irp Result)(Mem)) NTSTATUS(WSKAPI *PFN_WSK_GET_ADDRESS_INFO
#define IDS_ACCESS_DELETE
static SI_ACCESS RegAccess[]
BOOL WINAPI GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR pSecurityDescriptor, LPBOOL lpbDaclPresent, PACL *pDacl, LPBOOL lpbDaclDefaulted)
static ULONG STDMETHODCALLTYPE ISecurityObjectTypeInfo_fnRelease(struct ISecurityObjectTypeInfo *this)
#define SI_RESET_DACL_TREE
#define CONTAINER_INHERIT_ACE
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnPropertySheetPageCallback(struct ISecurityInformation *this, HWND hwnd, UINT uMsg, SI_PAGE_TYPE uPage)
#define IDS_ACCESS_FULLCONTROL
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static __inline PCRegKeySecurity impl_from_IEffectivePermission(struct IEffectivePermission *iface)
static __inline ULONG CRegKeySecurity_fnRelease(PCRegKeySecurity obj)
static __inline PCRegKeySecurity impl_from_ISecurityInformation(struct ISecurityInformation *iface)
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnQueryInterface(struct ISecurityInformation *this, REFIID iid, PVOID *pvObject)
static __inline HRESULT CRegKeySecurity_fnQueryInterface(PCRegKeySecurity obj, REFIID iid, PVOID *pvObject)
#define STDMETHODCALLTYPE
BOOL RegKeyEditPermissions(HWND hWndOwner, HKEY hKey, LPCWSTR lpMachine, LPCWSTR lpKeyName)
struct _CRegKeySecurity * PCRegKeySecurity
struct _CHANGE_CONTEXT CHANGE_CONTEXT
static GENERIC_MAPPING RegAccessMasks
_Out_writes_bytes_to_opt_ AbsoluteSecurityDescriptorSize PSECURITY_DESCRIPTOR _Inout_ PULONG _Out_writes_bytes_to_opt_ DaclSize PACL Dacl
_CRTIMP wchar_t *__cdecl wcscpy(_Out_writes_z_(_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
#define InterlockedDecrement
_In_ PCCERT_CONTEXT _In_ DWORD dwFlags
interface IDataObject * LPDATAOBJECT
static const WCHAR Cleanup[]
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnGetObjectInformation(struct ISecurityInformation *this, PSI_OBJECT_INFO pObjectInfo)
#define IDS_ACCESS_ENUMERATESUBKEYS
#define InterlockedIncrement
#define SI_EDIT_EFFECTIVE
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static ULONG STDMETHODCALLTYPE IEffectivePermission_fnRelease(struct IEffectivePermission *this)
HLOCAL NTAPI LocalFree(HLOCAL hMem)
#define FIELD_OFFSET(t, f)
_CRTIMP wchar_t *__cdecl wcscat(_Inout_updates_z_(_String_length_(_Dest)+_String_length_(_Source)+1) wchar_t *_Dest, _In_z_ const wchar_t *_Source)
BOOL(WINAPI * PEDITSECURITY)(HWND hwndOwner, struct ISecurityInformation *psi)
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
#define SI_ACCESS_GENERAL
static ULONG STDMETHODCALLTYPE ISecurityInformation_fnAddRef(struct ISecurityInformation *this)
_CRTIMP size_t __cdecl wcslen(_In_z_ const wchar_t *_Str)
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnGetSecurity(struct ISecurityInformation *this, SECURITY_INFORMATION RequestedInformation, PSECURITY_DESCRIPTOR *ppSecurityDescriptor, BOOL fDefault)
#define GetEffectiveRightsFromAcl
static __inline ULONG CRegKeySecurity_fnAddRef(PCRegKeySecurity obj)
static PCRegKeySecurity CRegKeySecurity_fnConstructor(LPWSTR lpRegKey, HKEY hRootKey, SI_OBJECT_INFO *ObjectInfo, BOOL *Btn)
ACCESS_MASK * PACCESS_MASK
#define GetProcAddress(x, y)
static SI_INHERIT_TYPE RegInheritTypes[]
#define HKEY_CLASSES_ROOT
HLOCAL NTAPI LocalAlloc(UINT uFlags, SIZE_T dwBytes)
#define MAKEINTRESOURCEW(i)
VOID UnloadAclUiDll(VOID)
static ULONG STDMETHODCALLTYPE ISecurityInformation_fnRelease(struct ISecurityInformation *this)
static PEDITSECURITY pfnEditSecurity
#define IDS_ACCESS_WRITEOWNER
DEFINE_GUID(IID_IRegKeySecurity, 0x965fc360, 0x16ff, 0x11d0, 0x0091, 0xcb, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x23)
#define KEY_CREATE_SUB_KEY
static const struct ifaceISecurityInformationVbtl vtblISecurityInformation
#define IDS_INHERIT_THISKEYONLY
#define HeapFree(x, y, z)
static HRESULT STDMETHODCALLTYPE ISecurityInformation_fnGetInheritTypes(struct ISecurityInformation *this, PSI_INHERIT_TYPE *ppInheritTypes, ULONG *pcInheritTypes)
#define HKEY_LOCAL_MACHINE
#define IDS_INHERIT_SUBKEYSONLY
#define KEY_ENUMERATE_SUB_KEYS