Я работаю в сценарии для удаления ключа TDL из реестра Windows 10.
Это они в:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileNotification
HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\ProfileNotification
Версия Windows для всех компьютеров - Windows 10 Pro 1809.
Компьютеры находятся в домене Windows Server, 35 компьютеров.
CLS
# AMBAS RUTAS AL REGISTRO, elimino el comentario segun requiero
$keyLocation = 'SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileNotification\'
# $keyLocation = 'SOFTWARE\WOW6432Node\Microsoft\Windows NT\CurrentVersion\ProfileNotification\'
$definition = @"
using System;
using System.Runtime.InteropServices;
namespace Win32Api
{
public class NtDll
{
[DllImport("ntdll.dll", EntryPoint="RtlAdjustPrivilege")]
public static extern int RtlAdjustPrivilege(ulong Privilege, bool Enable, bool CurrentThread, ref bool Enabled);
}
}
"@
# Defino variables
$computerName = $env:computername | Select-Object
$UserName = 'administrador'
$computerUser = $computerName + '\' + $UserName
$keyInitPath = 'HKLM'
$keyName = 'TDL'
$keyPath = $keyInitPath + ':\' + $keyLocation
$keyPathComplete = $keyPath + $keyName
$keyNameLocation = $keyLocation + $keyName
Add-Type -TypeDefinition $definition -PassThru
$bEnabled = $false
# Tomo posesión de la clave TDL
$res = [Win32Api.NtDll]::RtlAdjustPrivilege(9, $true, $false, [ref]$bEnabled)
$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($keyLocation + $keyName, [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::takeownership)
$acl = $key.GetAccessControl()
$acl.SetOwner([System.Security.Principal.NTAccount]$computerUser)
# SET Permisos a TDL para administradores
$key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey($keyNameLocation,[Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree,[System.Security.AccessControl.RegistryRights]::ChangePermissions)
$acl = $key.GetAccessControl()
$rule = New-Object System.Security.AccessControl.RegistryAccessRule (".\administradores","FullControl",@("ObjectInherit","ContainerInherit"),"None","Allow")
$acl.SetAccessRule($rule)
$key.SetAccessControl($acl)
# Elimino la clave TDL
Remove-Item -Path $keyPathComplete
Проблема в том, что они показывают мне ACCESS.DENIED, когда я запускаю его на другом компьютере в той же среде.
В компьютере разработчика ошибки не обнаружены, все выполняются как одно заклинание, но в другом это показывает ошибку ACCESS DENIED, но не в сегменте TAKE OWNER, а в сегменте REMOVE.
Я проверяю ключ реестра Key throug, и никаких изменений не происходит, а также ошибок в PowerShell. Я не понимаю этого.
Возможно, вы что-то изменили в разрешениях во время разработки, в реестре исходного компьютера.
Я не знаю ... код вроде бы в порядке, но ...
ПРИМЕЧАНИЕ: я выполняю как повышенные привилегии.
(извините за мой английский)