mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
use RegGetKeySecurity() directly to read the security information
svn path=/trunk/; revision=18014
This commit is contained in:
parent
0243833fef
commit
ff1322e0a3
2 changed files with 27 additions and 19 deletions
|
@ -86,7 +86,7 @@ SI_INHERIT_TYPE RegInheritTypes[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
LPREGKEYSECURITY CRegKeySecurity_fnConstructor(HANDLE Handle, SE_OBJECT_TYPE ObjectType, SI_OBJECT_INFO *ObjectInfo, BOOL *Btn)
|
static LPREGKEYSECURITY CRegKeySecurity_fnConstructor(HANDLE Handle, SI_OBJECT_INFO *ObjectInfo, BOOL *Btn)
|
||||||
{
|
{
|
||||||
LPREGKEYSECURITY obj;
|
LPREGKEYSECURITY obj;
|
||||||
|
|
||||||
|
@ -96,7 +96,6 @@ LPREGKEYSECURITY CRegKeySecurity_fnConstructor(HANDLE Handle, SE_OBJECT_TYPE Obj
|
||||||
obj->ref = 1;
|
obj->ref = 1;
|
||||||
obj->lpVtbl = &efvt;
|
obj->lpVtbl = &efvt;
|
||||||
obj->Handle = Handle;
|
obj->Handle = Handle;
|
||||||
obj->ObjectType = ObjectType;
|
|
||||||
obj->ObjectInfo = *ObjectInfo;
|
obj->ObjectInfo = *ObjectInfo;
|
||||||
obj->Btn = Btn;
|
obj->Btn = Btn;
|
||||||
}
|
}
|
||||||
|
@ -153,11 +152,32 @@ CRegKeySecurity_fnGetSecurity(LPREGKEYSECURITY this,
|
||||||
PSECURITY_DESCRIPTOR* ppSecurityDescriptor,
|
PSECURITY_DESCRIPTOR* ppSecurityDescriptor,
|
||||||
BOOL fDefault)
|
BOOL fDefault)
|
||||||
{
|
{
|
||||||
/* FIXME */
|
DWORD DescriptorSize = 0;
|
||||||
if(GetSecurityInfo(this->Handle, this->ObjectType, RequestedInformation, 0, 0,
|
PSECURITY_DESCRIPTOR SecurityDescriptor;
|
||||||
0, 0, ppSecurityDescriptor) == ERROR_SUCCESS)
|
LONG ErrorCode;
|
||||||
|
|
||||||
|
/* find out how much memory we need to allocate */
|
||||||
|
ErrorCode = RegGetKeySecurity(this->Handle, RequestedInformation, NULL, &DescriptorSize);
|
||||||
|
if(ErrorCode == ERROR_INSUFFICIENT_BUFFER)
|
||||||
{
|
{
|
||||||
return S_OK;
|
SecurityDescriptor = (PSECURITY_DESCRIPTOR)LocalAlloc(LMEM_FIXED, DescriptorSize);
|
||||||
|
if (SecurityDescriptor != NULL)
|
||||||
|
{
|
||||||
|
if (RegGetKeySecurity(this->Handle, RequestedInformation, SecurityDescriptor, &DescriptorSize) == ERROR_SUCCESS)
|
||||||
|
{
|
||||||
|
*ppSecurityDescriptor = SecurityDescriptor;
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
LocalFree((HLOCAL)SecurityDescriptor);
|
||||||
|
return E_ACCESSDENIED;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return E_OUTOFMEMORY;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -345,7 +365,7 @@ RegKeyEditPermissions(HWND hWndOwner,
|
||||||
ObjectInfo.pszObjectName = KeyName;
|
ObjectInfo.pszObjectName = KeyName;
|
||||||
ObjectInfo.pszPageTitle = KeyName;
|
ObjectInfo.pszPageTitle = KeyName;
|
||||||
|
|
||||||
if(!(RegKeySecurity = CRegKeySecurity_fnConstructor(hInfoKey, SE_REGISTRY_KEY, &ObjectInfo, &Result)))
|
if(!(RegKeySecurity = CRegKeySecurity_fnConstructor(hInfoKey, &ObjectInfo, &Result)))
|
||||||
{
|
{
|
||||||
/* FIXME - print error with FormatMessage */
|
/* FIXME - print error with FormatMessage */
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
@ -7,17 +7,6 @@ InitializeAclUiDll(VOID);
|
||||||
VOID
|
VOID
|
||||||
UnloadAclUiDll(VOID);
|
UnloadAclUiDll(VOID);
|
||||||
|
|
||||||
/* FIXME - remove the definition */
|
|
||||||
DWORD STDCALL
|
|
||||||
GetSecurityInfo(HANDLE handle,
|
|
||||||
SE_OBJECT_TYPE ObjectType,
|
|
||||||
SECURITY_INFORMATION SecurityInfo,
|
|
||||||
PSID* ppsidOwner,
|
|
||||||
PSID* ppsidGroup,
|
|
||||||
PACL* ppDacl,
|
|
||||||
PACL* ppSacl,
|
|
||||||
PSECURITY_DESCRIPTOR* ppSecurityDescriptor);
|
|
||||||
|
|
||||||
DEFINE_GUID(IID_CRegKeySecurity, 0x965fc360, 0x16ff, 0x11d0, 0x0091, 0xcb,0x00,0xaa,0x00,0xbb,0xb7,0x23);
|
DEFINE_GUID(IID_CRegKeySecurity, 0x965fc360, 0x16ff, 0x11d0, 0x0091, 0xcb,0x00,0xaa,0x00,0xbb,0xb7,0x23);
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
|
@ -72,7 +61,6 @@ typedef struct CRegKeySecurity
|
||||||
DWORD ref;
|
DWORD ref;
|
||||||
/* CRegKeySecurity fields */
|
/* CRegKeySecurity fields */
|
||||||
HANDLE Handle;
|
HANDLE Handle;
|
||||||
SE_OBJECT_TYPE ObjectType;
|
|
||||||
SI_OBJECT_INFO ObjectInfo;
|
SI_OBJECT_INFO ObjectInfo;
|
||||||
BOOL *Btn;
|
BOOL *Btn;
|
||||||
} REGKEYSECURITY;
|
} REGKEYSECURITY;
|
||||||
|
|
Loading…
Reference in a new issue