Commit in reactos/subsys/system/regedit on MAIN
security.c+358added 1.1
security.h+125added 1.1
En.rc+251.10 -> 1.11
framewnd.c+101.9 -> 1.10
main.c+181.7 -> 1.8
makefile+4-11.3 -> 1.4
regproc.h+121.3 -> 1.4
resource.h+191.9 -> 1.10
+571-1
2 added + 6 modified, total 8 files
added a key security editor (not yet working properly)

reactos/subsys/system/regedit
security.c added at 1.1
diff -N security.c
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ security.c	10 Jul 2004 23:25:17 -0000	1.1
@@ -0,0 +1,358 @@
+/*
+ * Regedit ACL Editor for Registry Keys
+ *
+ * Copyright (C) 2004 Thomas Weidenmueller <w3seek@reactos.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#define WIN32_LEAN_AND_MEAN     /* Exclude rarely-used stuff from Windows headers */
+#define INITGUID
+#include <windows.h>
+#include <tchar.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <accctrl.h>
+#include <objbase.h>
+#include <basetyps.h>
+#include <unknwn.h>
+#include "security.h"
+#include "regproc.h"
+#include "resource.h"
+
+/******************************************************************************
+   Implementation of the CRegKeySecurity interface
+ ******************************************************************************/
+ 
+SI_ACCESS RegAccess[] = {
+  {&GUID_NULL, KEY_ALL_ACCESS,         (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_FULLCONTROL),      SI_ACCESS_GENERAL | SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, KEY_READ,               (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_READ),             SI_ACCESS_GENERAL},
+  {&GUID_NULL, KEY_QUERY_VALUE,        (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_QUERYVALUE),       SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, KEY_SET_VALUE,          (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_SETVALUE),         SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, KEY_CREATE_SUB_KEY,     (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_CREATESUBKEY),     SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, KEY_ENUMERATE_SUB_KEYS, (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_ENUMERATESUBKEYS), SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, KEY_NOTIFY,             (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_NOTIFY),           SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, KEY_CREATE_LINK,        (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_CREATELINK),       SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, DELETE,                 (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_DELETE),           SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, WRITE_DAC,              (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_WRITEDAC),         SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, WRITE_OWNER,            (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_WRITEOWNER),       SI_ACCESS_SPECIFIC},
+  {&GUID_NULL, READ_CONTROL,           (LPWSTR)MAKEINTRESOURCE(IDS_ACCESS_READCONTROL),      SI_ACCESS_SPECIFIC},
+};
+
+DWORD RegDefaultAccess = 1; /* KEY_READ */
+
+GENERIC_MAPPING RegAccessMasks = {
+  KEY_READ,
+  KEY_WRITE,
+  KEY_EXECUTE,
+  KEY_ALL_ACCESS
+};
+
+SI_INHERIT_TYPE RegInheritTypes[] = {
+  {&GUID_NULL, 0,                                        (LPWSTR)MAKEINTRESOURCE(IDS_INHERIT_THISKEYONLY)},
+  {&GUID_NULL, CONTAINER_INHERIT_ACE,                    (LPWSTR)MAKEINTRESOURCE(IDS_INHERIT_THISKEYANDSUBKEYS)},
+  {&GUID_NULL, INHERIT_ONLY_ACE | CONTAINER_INHERIT_ACE, (LPWSTR)MAKEINTRESOURCE(IDS_INHERIT_SUBKEYSONLY)},
+};
+
+
+LPREGKEYSECURITY CRegKeySecurity_fnConstructor(HANDLE Handle, SE_OBJECT_TYPE ObjectType, SI_OBJECT_INFO *ObjectInfo, BOOL *Btn)
+{
+  LPREGKEYSECURITY obj;
+  
+  obj = (LPREGKEYSECURITY)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(REGKEYSECURITY));
+  if(obj != NULL)
+  {
+    obj->ref = 1;
+    obj->lpVtbl = &efvt;
+    obj->Handle = Handle;
+    obj->ObjectType = ObjectType;
+    obj->ObjectInfo = *ObjectInfo;
+    obj->Btn = Btn;
+  }
+  
+  return obj;
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnQueryInterface(LPREGKEYSECURITY this, 
+                                 REFIID iid, 
+				 PVOID *pvObject)
+{
+  if(IsEqualGUID(iid, &IID_IUnknown) ||
+     IsEqualGUID(iid, &IID_CRegKeySecurity))
+  {
+    *pvObject = this;
+    return S_OK;
+  }
+  
+  *pvObject = NULL;
+  return E_NOINTERFACE;
+}
+
+ULONG STDMETHODCALLTYPE
+CRegKeySecurity_fnAddRef(LPREGKEYSECURITY this)
+{
+  return (ULONG)InterlockedIncrement(&this->ref);
+}
+
+ULONG STDMETHODCALLTYPE
+CRegKeySecurity_fnRelease(LPREGKEYSECURITY this)
+{
+  ULONG rfc;
+  
+  rfc = (ULONG)InterlockedDecrement(&this->ref);
+  if(rfc == 0)
+  {
+    HeapFree(GetProcessHeap(), 0, this);
+  }
+  return rfc;
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnGetObjectInformation(LPREGKEYSECURITY this, 
+                                       PSI_OBJECT_INFO pObjectInfo)
+{
+  *pObjectInfo = this->ObjectInfo;
+  return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnGetSecurity(LPREGKEYSECURITY this, 
+                              SECURITY_INFORMATION RequestedInformation,
+                              PSECURITY_DESCRIPTOR* ppSecurityDescriptor,
+                              BOOL fDefault)
+{
+  /* FIXME */
+  if(GetSecurityInfo(this->Handle, this->ObjectType, RequestedInformation, 0, 0,
+                     0, 0, ppSecurityDescriptor) == ERROR_SUCCESS)
+  {
+    return S_OK;
+  }
+  else
+  {
+    return E_ACCESSDENIED;
+  }
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnSetSecurity(LPREGKEYSECURITY this, 
+                              SECURITY_INFORMATION RequestedInformation,
+                              PSECURITY_DESCRIPTOR pSecurityDescriptor)
+{
+  /* FIXME */
+  *this->Btn = TRUE;
+  return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnGetAccessRights(LPREGKEYSECURITY this, 
+                                  const GUID* pguidObjectType,
+                                  DWORD dwFlags,
+                                  PSI_ACCESS* ppAccess,
+                                  ULONG* pcAccesses,
+                                  ULONG* piDefaultAccess)
+{
+  *ppAccess = RegAccess;
+  *pcAccesses = sizeof(RegAccess) / sizeof(SI_ACCESS);
+  *piDefaultAccess = RegDefaultAccess;
+  return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnMapGeneric(LPREGKEYSECURITY this, 
+                             const GUID* pguidObjectType,
+                             UCHAR* pAceFlags,
+                             ACCESS_MASK* pMask)
+{
+  MapGenericMask(pMask, (PGENERIC_MAPPING)&RegAccessMasks);
+  *pMask &= ~SYNCHRONIZE;
+  return S_OK;
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnGetInheritTypes(LPREGKEYSECURITY this, 
+                                  PSI_INHERIT_TYPE* ppInheritTypes,
+                                  ULONG* pcInheritTypes)
+{
+  /* FIXME */
+  if(this->ObjectInfo.dwFlags & SI_CONTAINER)
+  {
+    *ppInheritTypes = RegInheritTypes;
+    *pcInheritTypes = sizeof(RegInheritTypes) / sizeof(SI_INHERIT_TYPE);
+    return S_OK;
+  }
+  return E_NOTIMPL;
+}
+
+HRESULT STDMETHODCALLTYPE
+CRegKeySecurity_fnPropertySheetPageCallback(LPREGKEYSECURITY this, 
+                                            HWND hwnd,
+                                            UINT uMsg,
+                                            SI_PAGE_TYPE uPage)
+{
+  /* FIXME */
+  return S_OK;
+}
+
+
+/******************************************************************************/
+
+#define ACLUI_DLL	_T("aclui.dll")
+#define FN_EDITSECURITY	"EditSecurity" /* no unicode, GetProcAddr doesn't accept unicode! */
+
+typedef struct _CHANGE_CONTEXT
+{
+  HKEY hKey;
+  LPTSTR KeyString;
+} CHANGE_CONTEXT, *PCHANGE_CONTEXT;
+
+typedef BOOL (WINAPI *PEDITSECURITY)(HWND hwndOwner,
+                                     LPREGKEYSECURITY psi);
+
+static PEDITSECURITY pfnEditSecurity;
+static HMODULE hAclUiDll;
+
+BOOL
+InitializeAclUiDll(VOID)
+{
+  if(!(hAclUiDll = LoadLibrary(ACLUI_DLL)))
+  {
+    return FALSE;
+  }
+  if(!(pfnEditSecurity = (PEDITSECURITY)GetProcAddress(hAclUiDll, FN_EDITSECURITY)))
+  {
+    FreeLibrary(hAclUiDll);
+    hAclUiDll = NULL;
+    return FALSE;
+  }
+  
+  return TRUE;
+}
+
+VOID
+UnloadAclUiDll(VOID)
+{
+  if(hAclUiDll != NULL)
+  {
+    FreeLibrary(hAclUiDll);
+  }
+}
+
+BOOL
+RegKeyEditPermissions(HWND hWndOwner,
+                      HKEY hKey,
+                      LPCTSTR lpMachine,
+                      LPCTSTR lpKeyName)
+{
+  BOOL Result;
+  HMODULE hAclEditDll;
+  LPWSTR Machine, KeyName;
+  HKEY hInfoKey;
+  LPREGKEYSECURITY RegKeySecurity;
+  SI_OBJECT_INFO ObjectInfo;
+  
+  if(pfnEditSecurity == NULL)
+  {
+    return FALSE;
+  }
+  
+#ifndef UNICODE
+  /* aclui.dll only accepts unicode strings, convert them */
+  if(lpMachine != NULL)
+  {
+    int lnMachine = lstrlen(lpMachine);
+    if(!(Machine = HeapAlloc(GetProcessHeap(), 0, (lnMachine + 1) * sizeof(WCHAR))))
+    {
+      SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+      return FALSE;
+    }
+    if(lnMachine > 0)
+    {
+      MultiByteToWideChar(CP_ACP, 0, lpMachine, -1, Machine, lnMachine + 1);
+    }
+    else
+      *Machine = L'\0';
+  }
+  else
+    Machine = NULL;
+  
+  if(lpKeyName != NULL)
+  {
+    int lnKeyName = lstrlen(lpKeyName);
+    if(!(KeyName = HeapAlloc(GetProcessHeap(), 0, (lnKeyName + 1) * sizeof(WCHAR))))
+    {
+      if(Machine != NULL)
+      {
+        HeapFree(GetProcessHeap(), 0, Machine);
+      }
+      SetLastError(ERROR_NOT_ENOUGH_MEMORY);
+      return FALSE;
+    }
+    if(lnKeyName > 0)
+    {
+      MultiByteToWideChar(CP_ACP, 0, lpKeyName, -1, KeyName, lnKeyName + 1);
+    }
+    else
+      *KeyName = L'\0';
+  }
+  else
+    KeyName = NULL;
+#else
+  Machine = (LPWSTR)lpMachine;
+  KeyName = (LPWSTR)lpKeyName;
+#endif
+  
+    /* try to open the key again with more access rights */
+  if(RegOpenKeyEx(hKey, NULL, 0, READ_CONTROL, &hInfoKey) != ERROR_SUCCESS)
+  {
+    /* FIXME - print error with FormatMessage */
+    return FALSE;
+  }
+  
+  ObjectInfo.dwFlags = SI_EDIT_ALL  | SI_ADVANCED | SI_CONTAINER | SI_OWNER_RECURSE | SI_EDIT_PERMS;
+  ObjectInfo.hInstance = hInst;
+  ObjectInfo.pszServerName = Machine;
+  ObjectInfo.pszObjectName = KeyName;
+  ObjectInfo.pszPageTitle = KeyName;
+  
+  if(!(RegKeySecurity = CRegKeySecurity_fnConstructor(hInfoKey, SE_REGISTRY_KEY, &ObjectInfo, &Result)))
+  {
+    /* FIXME - print error with FormatMessage */
+    return FALSE;
+  }
+
+  /* display the security editor dialog */
+  pfnEditSecurity(hWndOwner, RegKeySecurity);
+  
+  /* dereference the interface, it should be destroyed here */
+  CRegKeySecurity_fnRelease(RegKeySecurity);
+
+  RegCloseKey(hInfoKey);
+  
+#ifndef UNICODE
+  if(Machine != NULL)
+  {
+    HeapFree(GetProcessHeap(), 0, Machine);
+  }
+  if(KeyName != NULL)
+  {
+    HeapFree(GetProcessHeap(), 0, KeyName);
+  }
+#endif
+  
+  return Result;
+}
+
+/* EOF */

reactos/subsys/system/regedit
security.h added at 1.1
diff -N security.h
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ security.h	10 Jul 2004 23:25:17 -0000	1.1
@@ -0,0 +1,125 @@
+#ifndef _REGEXP_SECURITY_H
+#define _REGEXP_SECURITY_H
+
+/* 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);
+
+/******************************************************************************
+   CRegKeySecurity
+ ******************************************************************************/
+
+typedef struct CRegKeySecurity *LPREGKEYSECURITY;
+
+typedef struct ifaceCRegKeySecurityVbtl ifaceCRegKeySecurityVbtl;
+struct ifaceCRegKeySecurityVbtl
+{
+  /* IUnknown */
+  HRESULT (STDMETHODCALLTYPE *QueryInterface)(LPREGKEYSECURITY this, 
+                                              REFIID iid, 
+					      PVOID *pvObject);
+  ULONG (STDMETHODCALLTYPE *AddRef)(LPREGKEYSECURITY this);
+  ULONG (STDMETHODCALLTYPE *Release)(LPREGKEYSECURITY this);
+  
+  /* CRegKeySecurity */
+  HRESULT (STDMETHODCALLTYPE *GetObjectInformation)(LPREGKEYSECURITY this, 
+                                                    PSI_OBJECT_INFO pObjectInfo);
+  HRESULT (STDMETHODCALLTYPE *GetSecurity)(LPREGKEYSECURITY this, 
+                                           SECURITY_INFORMATION RequestedInformation,
+                                           PSECURITY_DESCRIPTOR* ppSecurityDescriptor,
+                                           BOOL fDefault);
+  HRESULT (STDMETHODCALLTYPE *SetSecurity)(LPREGKEYSECURITY this, 
+                                           SECURITY_INFORMATION RequestedInformation,
+                                           PSECURITY_DESCRIPTOR pSecurityDescriptor);
+  HRESULT (STDMETHODCALLTYPE *GetAccessRights)(LPREGKEYSECURITY this, 
+                                               const GUID* pguidObjectType,
+                                               DWORD dwFlags,
+                                               PSI_ACCESS* ppAccess,
+                                               ULONG* pcAccesses,
+                                               ULONG* piDefaultAccess);
+  HRESULT (STDMETHODCALLTYPE *MapGeneric)(LPREGKEYSECURITY this, 
+                                          const GUID* pguidObjectType,
+                                          UCHAR* pAceFlags,
+                                          ACCESS_MASK* pMask);
+  HRESULT (STDMETHODCALLTYPE *GetInheritTypes)(LPREGKEYSECURITY this, 
+                                               PSI_INHERIT_TYPE* ppInheritTypes,
+                                               ULONG* pcInheritTypes);
+  HRESULT (STDMETHODCALLTYPE *PropertySheetPageCallback)(LPREGKEYSECURITY this, 
+                                                         HWND hwnd,
+                                                         UINT uMsg,
+                                                         SI_PAGE_TYPE uPage);
+};
+
+typedef struct CRegKeySecurity
+{
+  /* IUnknown fields */
+  ifaceCRegKeySecurityVbtl* lpVtbl;
+  DWORD ref;
+  /* CRegKeySecurity fields */
+  HANDLE Handle;
+  SE_OBJECT_TYPE ObjectType;
+  SI_OBJECT_INFO ObjectInfo;
+  BOOL *Btn;
+} REGKEYSECURITY;
+
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnQueryInterface(LPREGKEYSECURITY this,
+                                                           REFIID iid,
+							   PVOID *pvObject);
+ULONG STDMETHODCALLTYPE CRegKeySecurity_fnAddRef(LPREGKEYSECURITY this);
+ULONG STDMETHODCALLTYPE CRegKeySecurity_fnRelease(LPREGKEYSECURITY this);
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnGetObjectInformation(LPREGKEYSECURITY this,
+                                                                 PSI_OBJECT_INFO pObjectInfo);
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnGetSecurity(LPREGKEYSECURITY this, 
+                                                        SECURITY_INFORMATION RequestedInformation,
+                                                        PSECURITY_DESCRIPTOR* ppSecurityDescriptor,
+                                                        BOOL fDefault);
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnSetSecurity(LPREGKEYSECURITY this, 
+                                                        SECURITY_INFORMATION RequestedInformation,
+                                                        PSECURITY_DESCRIPTOR pSecurityDescriptor);
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnGetAccessRights(LPREGKEYSECURITY this, 
+                                                            const GUID* pguidObjectType,
+                                                            DWORD dwFlags,
+                                                            PSI_ACCESS* ppAccess,
+                                                            ULONG* pcAccesses,
+                                                            ULONG* piDefaultAccess);
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnMapGeneric(LPREGKEYSECURITY this, 
+                                                       const GUID* pguidObjectType,
+                                                       UCHAR* pAceFlags,
+                                                       ACCESS_MASK* pMask);
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnGetInheritTypes(LPREGKEYSECURITY this, 
+                                                            PSI_INHERIT_TYPE* ppInheritTypes,
+                                                            ULONG* pcInheritTypes);
+HRESULT STDMETHODCALLTYPE CRegKeySecurity_fnPropertySheetPageCallback(LPREGKEYSECURITY this, 
+                                                                      HWND hwnd,
+                                                                      UINT uMsg,
+                                                                      SI_PAGE_TYPE uPage);
+
+static ifaceCRegKeySecurityVbtl efvt =
+{
+  /* IUnknown methods */
+  CRegKeySecurity_fnQueryInterface,
+  CRegKeySecurity_fnAddRef,
+  CRegKeySecurity_fnRelease,
+  
+  /* CRegKeySecurity methods */
+  CRegKeySecurity_fnGetObjectInformation,
+  CRegKeySecurity_fnGetSecurity,
+  CRegKeySecurity_fnSetSecurity,
+  CRegKeySecurity_fnGetAccessRights,
+  CRegKeySecurity_fnMapGeneric,
+  CRegKeySecurity_fnGetInheritTypes,
+  CRegKeySecurity_fnPropertySheetPageCallback
+};
+
+#endif /* _REGEXP_SECURITY_H */
+
+/* EOF */

reactos/subsys/system/regedit
En.rc 1.10 -> 1.11
diff -u -r1.10 -r1.11
--- En.rc	21 Jun 2004 10:24:51 -0000	1.10
+++ En.rc	10 Jul 2004 23:25:17 -0000	1.11
@@ -69,6 +69,8 @@
             MENUITEM "&DWORD Value",                ID_EDIT_NEW_DWORDVALUE
         END
         MENUITEM SEPARATOR
+        MENUITEM "&Permissions...",		ID_EDIT_PERMISSIONS
+        MENUITEM SEPARATOR
         MENUITEM "&Delete\tDel",                ID_EDIT_DELETE
         MENUITEM "&Rename",                     ID_EDIT_RENAME
         MENUITEM SEPARATOR
@@ -289,6 +291,29 @@
     IDS_FLT_ALLFILES_FLT    "*.*"
 END
 
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_ACCESS_FULLCONTROL        "Full Control"
+  IDS_ACCESS_READ               "Read"
+  IDS_ACCESS_QUERYVALUE         "Query Value"
+  IDS_ACCESS_SETVALUE           "Set Value"
+  IDS_ACCESS_CREATESUBKEY       "Create Subkey"
+  IDS_ACCESS_ENUMERATESUBKEYS   "Enumerate Subkeys"
+  IDS_ACCESS_NOTIFY             "Notify"
+  IDS_ACCESS_CREATELINK         "Create Link"
+  IDS_ACCESS_DELETE             "Delete"
+  IDS_ACCESS_WRITEDAC           "Write DAC"
+  IDS_ACCESS_WRITEOWNER         "Write Owner"
+  IDS_ACCESS_READCONTROL        "Read Control"
+END
+
+STRINGTABLE DISCARDABLE
+BEGIN
+  IDS_INHERIT_THISKEYONLY        "This key only"
+  IDS_INHERIT_THISKEYANDSUBKEYS  "This key and subkeys"
+  IDS_INHERIT_SUBKEYSONLY        "Subkeys only"
+END
+
 /*****************************************************************/
 
 

reactos/subsys/system/regedit
framewnd.c 1.9 -> 1.10
diff -u -r1.9 -r1.10
--- framewnd.c	21 Jun 2004 10:24:51 -0000	1.9
+++ framewnd.c	10 Jul 2004 23:25:17 -0000	1.10
@@ -597,6 +597,16 @@
     case ID_EDIT_COPYKEYNAME:
         CopyKeyName(hWnd, _T(""));
         break;
+    case ID_EDIT_PERMISSIONS:
+        if(keyPath != NULL && _tcslen(keyPath) > 0)
+        {
+          RegKeyEditPermissions(hWnd, hKey, NULL, keyPath);
+        }
+        else
+        {
+          MessageBeep(MB_ICONASTERISK);
+        }
+        break;
     case ID_REGISTRY_PRINTERSETUP:
         /*PRINTDLG pd;*/
         /*PrintDlg(&pd);*/

reactos/subsys/system/regedit
main.c 1.7 -> 1.8
diff -u -r1.7 -r1.8
--- main.c	21 Jun 2004 10:24:51 -0000	1.7
+++ main.c	10 Jul 2004 23:25:17 -0000	1.8
@@ -68,6 +68,8 @@
 
 BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
 {
+    BOOL AclUiAvailable;
+    
     WNDCLASSEX wcFrame = {
                              sizeof(WNDCLASSEX),
                              CS_HREDRAW | CS_VREDRAW/*style*/,
@@ -111,6 +113,21 @@
 
     /* Initialize the Windows Common Controls DLL */
     InitCommonControls();
+    
+    AclUiAvailable = InitializeAclUiDll();
+    if(!AclUiAvailable)
+    {
+      HMENU hEditMenu;
+      int mePos;
+      /* hide the Edit/Permissions... menu entry */
+      hEditMenu = GetSubMenu(hMenuFrame, 1);
+      if(hEditMenu != NULL)
+      {
+        RemoveMenu(hEditMenu, ID_EDIT_PERMISSIONS, MF_BYCOMMAND);
+        /* remove the separator after the menu item */
+        RemoveMenu(hEditMenu, 4, MF_BYPOSITION);
+      }
+    }
 
     nClipboardFormat = RegisterClipboardFormat(strClipboardFormat);
     /* if (nClipboardFormat == 0) {
@@ -145,6 +162,7 @@
 {
     UnregisterHexEditorClass(hInstance);
     DestroyMenu(hMenuFrame);
+    UnloadAclUiDll();
 }
 
 BOOL TranslateChildTabMessage(MSG *msg)

reactos/subsys/system/regedit
makefile 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- makefile	20 Jun 2004 12:21:47 -0000	1.3
+++ makefile	10 Jul 2004 23:25:17 -0000	1.4
@@ -14,7 +14,9 @@
 
 TARGET_CFLAGS = -D_WIN32_IE=0x0501 -D_WIN32_WINNT=0x0501 -D__USE_W32API
 	
-TARGET_GCCLIBS = msvcrt advapi32 kernel32 comctl32 comdlg32 shell32
+TARGET_GCCLIBS = msvcrt advapi32 kernel32 comctl32 comdlg32 shell32 ole32
+
+TARGET_SDKLIBS = kernel32.a advapi32.a user32.a gdi32.a wine_uuid.a ole32.a
 
 TARGET_OBJECTS = \
 	about.o \
@@ -26,6 +28,7 @@
 	main.o \
 	regedit.o \
 	regproc.o \
+	security.o \
 	treeview.o
 
 include $(PATH_TO_TOP)/rules.mak

reactos/subsys/system/regedit
regproc.h 1.3 -> 1.4
diff -u -r1.3 -r1.4
--- regproc.h	20 Jun 2004 02:22:44 -0000	1.3
+++ regproc.h	10 Jul 2004 23:25:17 -0000	1.4
@@ -26,6 +26,8 @@
 #define SUCCESS               0
 #define KEY_VALUE_ALREADY_SET 2
 
+extern HINSTANCE hInst;
+
 typedef void (*CommandAPI)(LPSTR lpsLine);
 
 void doSetValue(LPSTR lpsLine);
@@ -71,3 +73,13 @@
  * api queryValue prototypes
  */
 void    processQueryValue(LPSTR cmdline);
+
+/*
+ * Permission prototypes
+ */
+
+BOOL InitializeAclUiDll(VOID);
+VOID UnloadAclUiDll(VOID);
+BOOL RegKeyEditPermissions(HWND hWndOwner, HKEY hKey, LPCTSTR lpMachine, LPCTSTR lpKeyName);
+
+/* EOF */

reactos/subsys/system/regedit
resource.h 1.9 -> 1.10
diff -u -r1.9 -r1.10
--- resource.h	21 Jun 2004 10:24:52 -0000	1.9
+++ resource.h	10 Jul 2004 23:25:17 -0000	1.10
@@ -127,6 +127,7 @@
 #define IDS_ERR_RENVAL_CAPTION		32856
 #define IDS_ERR_RENVAL_TOEMPTY		32857
 #define ID_SWITCH_PANELS                32871
+#define ID_EDIT_PERMISSIONS		32872
 
 #define IDS_FLT_REGFILES		31001
 #define IDS_FLT_REGFILES_FLT		31002
@@ -135,6 +136,24 @@
 #define IDS_FLT_ALLFILES		31005
 #define IDS_FLT_ALLFILES_FLT		31006
 
+#define IDS_ACCESS_FULLCONTROL		31101
+#define IDS_ACCESS_READ			31102
+#define IDS_ACCESS_QUERYVALUE		31103
+#define IDS_ACCESS_SETVALUE		31104
+#define IDS_ACCESS_CREATESUBKEY		31105
+#define IDS_ACCESS_ENUMERATESUBKEYS	31106
+#define IDS_ACCESS_NOTIFY		31107
+#define IDS_ACCESS_CREATELINK		31108
+#define IDS_ACCESS_DELETE		31109
+#define IDS_ACCESS_WRITEDAC		31110
+#define IDS_ACCESS_WRITEOWNER		31111
+#define IDS_ACCESS_READCONTROL		31112
+
+#define IDS_INHERIT_THISKEYONLY		31121
+#define IDS_INHERIT_THISKEYANDSUBKEYS	31122
+#define IDS_INHERIT_SUBKEYSONLY		31123
+
+
 #define IDD_EDIT_STRING			2000
 #define IDC_VALUE_NAME			2001
 #define IDC_VALUE_DATA			2002
CVSspam 0.2.8