Права доступа к ключу реестра (прочитать и изменить)

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

_@@@
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.10.2006 (Чт) 15:27

Права доступа к ключу реестра (прочитать и изменить)

Сообщение _@@@ » 23.01.2007 (Вт) 21:27

В общем, такая задача: прочитать права доступа к конкрентному ключу реестра и если на него есть хоть какие-нибудь запреты хоть для каких пользователей, сделать ключ доступным всем юзверям и для любых действий. Ключ в HKLM. Желательно средствами .NET, но на крайняк и на API сойдет....

Собственно, кой чего нарыл:
Код: Выделить всё
Imports System
Imports System.Reflection
Imports System.Security
Imports System.Security.AccessControl
Imports Microsoft.Win32

Public Class Example
    Public Shared Sub Main()
        ' Delete the example key if it exists.
        Try
            Registry.CurrentUser.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key has been deleted.")
        Catch ex As ArgumentException
            ' ArgumentException is thrown if the key does not exist. In
            ' this case, there is no reason to display a message.
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
            Return
        End Try

        Dim user As String = Environment.UserDomainName & "\" & Environment.UserName

        Dim rs As New RegistrySecurity()

        ' Allow the current user to read and delete the key.
        '
        rs.AddAccessRule(new RegistryAccessRule(user, _
            RegistryRights.ReadKey Or RegistryRights.Delete, _
            InheritanceFlags.None, _
            PropagationFlags.None, _
            AccessControlType.Allow))

        ' Prevent the current user from writing or changing the
        ' permission set of the key. Note that if Delete permission
        ' were not allowed in the previous access rule, denying
        ' WriteKey permission would prevent the user from deleting the
        ' key.
        rs.AddAccessRule(new RegistryAccessRule(user, _
            RegistryRights.WriteKey Or RegistryRights.ChangePermissions, _
            InheritanceFlags.None, _
            PropagationFlags.None, _
            AccessControlType.Deny))

        ' Create the example key with registry security.
        Dim rk As RegistryKey = Nothing
        Try
            rk = Registry.CurrentUser.CreateSubKey("RegistryRightsExample", _
                RegistryKeyPermissionCheck.Default, rs)
            Console.WriteLine(vbCrLf & "Example key created.")
            rk.SetValue("ValueName", "StringValue")
        Catch ex As Exception
            Console.WriteLine(vbCrLf & "Unable to create the example key: {0}", ex)
        End Try

        If rk IsNot Nothing Then rk.Close()

        rk = Registry.CurrentUser

        Dim rk2 As RegistryKey
       
        ' Open the key with read access.
        rk2 = rk.OpenSubKey("RegistryRightsExample", False)
        Console.WriteLine(vbCrLf & "Retrieved value: {0}", rk2.GetValue("ValueName"))
        rk2.Close()

        ' Attempt to open the key with write access.
        Try
            rk2 = rk.OpenSubKey("RegistryRightsExample", True)
        Catch ex As SecurityException
            Console.WriteLine(vbCrLf & "Unable to write to the example key." _
                & " Caught SecurityException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then rk2.Close()

        ' Attempt to change permissions for the key.
        Try
            rs = New RegistrySecurity()
            rs.AddAccessRule(new RegistryAccessRule(user, _
                RegistryRights.WriteKey, _
                InheritanceFlags.None, _
                PropagationFlags.None, _
                AccessControlType.Allow))
            rk2 = rk.OpenSubKey("RegistryRightsExample", False)
            rk2.SetAccessControl(rs)
            Console.WriteLine(vbCrLf & "Example key permissions were changed.")
        Catch ex As UnauthorizedAccessException
            Console.WriteLine(vbCrLf & "Unable to change permissions for the example key." _
                & " Caught UnauthorizedAccessException: {0}", ex.Message)
        End Try
        If rk2 IsNot Nothing Then rk2.Close()

        Console.WriteLine(vbCrLf & "Press Enter to delete the example key.")
        Console.ReadLine()

        Try
            rk.DeleteSubKey("RegistryRightsExample")
            Console.WriteLine("Example key was deleted.")
        Catch ex As Exception
            Console.WriteLine("Unable to delete the example key: {0}", ex)
        End Try

        rk.Close()
    End Sub
End Class


Только вот этот код меняет права доступа для конкретного пользователя компьютера (имя которого содержится в строковой переменной user). А может знает кто, как нужно исхитриться, чтобы поменять права доступа для всех пользователей?

Как вариант можно получать список всех пользователей на компе и затем менять права доступа для каждого юзверя. Нашел примерчик получения всех юзверей компа на API, но может у кого есть именно на .NET'e?
Здесь типа демократия,
На самом деле царство
Я так люблю свою страну
И ненавижу государство...

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 24.01.2007 (Ср) 9:12

переберай юзеров под админом и абгрейдь права
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

_@@@
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.10.2006 (Чт) 15:27

Сообщение _@@@ » 24.01.2007 (Ср) 15:41

lord0n писал(а):переберай юзеров под админом и абгрейдь права


Гм... Как?

Пример на API на .NET пока не смог переделать, там заморочки с типами данных... А примера на .NET'e у меня нету...
Здесь типа демократия,
На самом деле царство
Я так люблю свою страну
И ненавижу государство...

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.01.2007 (Ср) 17:32

А пример на API где можно узреть?
Весь мир матрица, а мы в нем потоки байтов!

_@@@
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.10.2006 (Чт) 15:27

Сообщение _@@@ » 25.01.2007 (Чт) 5:42

Здесь типа демократия,
На самом деле царство
Я так люблю свою страну
И ненавижу государство...

_@@@
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 23
Зарегистрирован: 26.10.2006 (Чт) 15:27

Сообщение _@@@ » 26.01.2007 (Пт) 8:37

Вроде получилось... Все, вопрос решен.
Здесь типа демократия,
На самом деле царство
Я так люблю свою страну
И ненавижу государство...


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 57

    TopList