No apruebo el uso de aplicaciones commandline a menos que sea para situaciones complicadas y tediosas como esta...
...Una class para usar SETACL para modificar el propietario de una clave de registro y para modificar los permisos de la clave:
PD: a ver si alguien nos sorprende con un código nativo...

#Region " SETACL Helper "
' [ SETACL Helper ]
'
' // By Elektro H@cker
'
'
' INSTRUCTIONS:
' 1. Add the "SETACL.exe" in the project.
'
' Examples :
'
' SETACL.Set_Owner("HKCU\Test", True)
' SETACL.Set_Permission("HKCU\Test\", SETACL.SETACL_Permission.full, False)
Public Class SETACL
' <summary>
' Gets or sets the SETACL executable path.
' </summary>
Public Shared SETACL_Location As String = ".\SetACL.exe"
' <summary>
' Gets or sets the SETACL logfile filename.
' </summary>
Public Shared SETACL_Logfile As String = ".\SetACL.log"
Public Enum SETACL_Permission
' <summary>
' Create link
' </summary>
create_link
' <summary>
' Create subkeys
' </summary>
create_subkey
' <summary>
' Delete
' </summary>
delete
' <summary>
' Enumerate subkeys
' </summary>
enum_subkeys
' <summary>
' Notify
' </summary>
notify
' <summary>
' Query value
' </summary>
query_val
' <summary>
' Read control
' </summary>
read_access
' <summary>
' Set value
' </summary>
set_val
' <summary>
' Write permissions
' </summary>
write_dacl
' <summary>
' Take ownership
' </summary>
write_owner
' <summary>
' Read (KEY_ENUMERATE_SUB_KEYS + KEY_EXECUTE + KEY_NOTIFY + KEY_QUERY_VALUE + KEY_READ + READ_CONTROL)
' </summary>
read
' <summary>
' Full access
' (KEY_CREATE_LINK + KEY_CREATE_SUB_KEY +KEY_ENUMERATE_SUB_KEYS + ...
' ...KEY_EXECUTE + KEY_NOTIFY + KEY_QUERY_VALUE + KEY_READ + KEY_SET_VALUE + ...
' ...KEY_WRITE + READ_CONTROL + WRITE_OWNER + WRITE_DAC + DELETE)
' </summary>
full
End Enum
' <summary>
' Checks if SETACL process is avaliable.
' </summary>
Public Shared Function Is_Avaliable() As Boolean
Return IO.
File.
Exists(SETACL_Location
) End Function
' <summary>
' Takes ownership of a registry key.
' </summary>
Public Shared Sub Set_Owner(ByVal RegKey As String, ByVal Recursive As Boolean, Optional ByVal UserName As String = "%USERNAME%")
If RegKey.EndsWith("\") Then RegKey = RegKey.Substring(0, RegKey.Length - 1)
Dim Recursion As String = "No" : If Recursive Then Recursion = "Yes"
Dim SETACL As New Process(), SETACL_Info As New ProcessStartInfo()
SETACL_Info.FileName = SETACL_Location
SETACL_Info.Arguments = String.Format("-on ""{0}"" -ot reg -ownr ""n:{1}"" -rec ""{2}"" -actn setowner -silent -ignoreerr -log ""{3}""", RegKey, UserName, Recursion, SETACL_Logfile)
SETACL_Info.CreateNoWindow = True
SETACL_Info.UseShellExecute = False
SETACL.StartInfo = SETACL_Info
SETACL.Start()
SETACL.WaitForExit()
If SETACL.ExitCode <> 0 Then
' Throw New Exception("Exit code: " & SETACL.ExitCode)
MsgBox(IO.
File.
ReadAllText(SETACL_Logfile
)) End If
End Sub
' <summary>
' Sets the user permission of a registry key.
' </summary>
Public Shared Sub Set_Permission(ByVal RegKey As String, ByVal Permission As SETACL_Permission, ByVal Recursive As Boolean, Optional ByVal UserName As String = "%USERNAME%")
If RegKey.EndsWith("\") Then RegKey = RegKey.Substring(0, RegKey.Length - 1)
Dim Recursion As String = "No" : If Recursive Then Recursion = "Yes"
Dim SETACL As New Process(), SETACL_Info As New ProcessStartInfo()
SETACL_Info.FileName = SETACL_Location
SETACL_Info.Arguments = String.Format("-on ""{0}"" -ot reg -ace ""n:{1};p:{2}"" -rec ""{3}"" -actn ace -silent -ignoreerr -log ""{4}""", RegKey, UserName, Permission, Recursion, SETACL_Logfile)
SETACL_Info.CreateNoWindow = True
SETACL_Info.UseShellExecute = False
SETACL.StartInfo = SETACL_Info
SETACL.Start()
SETACL.WaitForExit()
If SETACL.ExitCode <> 0 Then
' Throw New Exception("Exit code: " & SETACL.ExitCode)
MsgBox(IO.
File.
ReadAllText(SETACL_Logfile
)) End If
End Sub
End Class
#End Region