System.Security.AccessControl.RegistrySecurity.AddAccessRule C# (CSharp) Method

AddAccessRule() public method

public AddAccessRule ( RegistryAccessRule rule ) : void
rule RegistryAccessRule
return void
        public void AddAccessRule(RegistryAccessRule rule)
        {
            base.AddAccessRule(rule);
        }

Same methods

RegistrySecurity::AddAccessRule ( System rule ) : void

Usage Example

Example #1
0
        static bool WriteRegistry()
        {
            try
            {
                // 로컬호스트 관리자그룹을 사용해서 레지스트리 쓰기 권한을 할당한다.
                // 도메인에 속하는 컴퓨터인 경우 아래 코드가 잘 될지 안될지 모르겠다.
                RegistryAccessRule allow_write_rule = new RegistryAccessRule(new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null), RegistryRights.FullControl, AccessControlType.Allow);
                RegistrySecurity securitySettings = new RegistrySecurity();
                securitySettings.AddAccessRule(allow_write_rule);

                // MSDN의 샘플은 HKEY_CLASSROOT 에 저장하게 되어있는데
                // HKEY_CURRENT_USER 에 저장하는걸 권장한다고 하더라.
                // 난 그냥 HKEY_LOCAL_MACHINE 에 저장한다.
                RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Classes", RegistryKeyPermissionCheck.ReadWriteSubTree);
                key.SetAccessControl(securitySettings);

                // 스키마 생성
                RegistryKey reg_base = key.CreateSubKey("mytro.RecPlayer");
                if (null == reg_base)
                    return false;
                // 기본값 설정
                reg_base.SetValue("", "mytro record player URI", RegistryValueKind.String);
                // 이게 꼭 필요한지는 모르겠음
                reg_base.SetValue("Content Type", "application/x-mytrorec", RegistryValueKind.String);
                // 이게 있어야 브라우저에서 클릭했을때 동작한다.
                reg_base.SetValue("URL Protocol", "", RegistryValueKind.String);

                // icon 설정
                RegistryKey icon = reg_base.CreateSubKey("DefaultIcon");
                if (null == icon)
                    return false;
                icon.SetValue("", @"C:\MYTRO\RecordPlayer\MytroPlayer.exe,1", RegistryValueKind.String);

                // 핸들러 설정 (shell open 을 만들어준다.)
                RegistryKey shell = reg_base.CreateSubKey("shell");
                if (null == shell)
                    return false;
                shell.SetValue("", "open", RegistryValueKind.String);

                RegistryKey open = shell.CreateSubKey("open");
                if (null == open)
                    return false;

                RegistryKey command = open.CreateSubKey("command");
                if (null == command)
                    return false;

                // 실행파일도 Environment.SpecialFolder.ApplicationData 에 넣고 사용하는걸 권장하는데 왜 그런지는 잘 모르겠음...
                // 저 규칙에 따른다면 경로는 이렇게 된다. C:/Users/홍준기/AppData/Roaming/RecordPlayer/MytroPlayer.exe
                command.SetValue("", @"""C:\MYTRO\RecordPlayer\MytroPlayer.exe"" ""%1""", RegistryValueKind.String);

                return true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
            }
            return false;
        }
All Usage Examples Of System.Security.AccessControl.RegistrySecurity::AddAccessRule