找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26564|回复: 4

[注册表类] 跪求大神指点注册表权限的代码解释一下

[复制链接]
发表于 2019-7-29 21:43:22 | 显示全部楼层 |阅读模式
下面这个批处理是处理注册表权限的,功能是防止写入和删除。但是代码就完全看不懂了。
后面看着向一堆乱码的,求大神逐句详细解释一下,万分感谢
  1. @echo off
  2. setlocal EnableDelayedExpansion
  3. set "SPPk=SOFTWARE\Microsoft\Windows NT\CurrentVersion\SoftwareProtectionPlatform"
  4. call :reg_takeownership "HKLM\%SPPk%\55c92734-d682-4d71-983e-d6ec3f16059f" S-1-5-32-544 "SetValue, Delete" Deny recursive
  5. pause

  6. :reg_takeownership 1:key[ex:"HKCU\Console"] 2:sid[def:S-1-5-32-544] 3:perm[def:FullControl] 4:allow[def:Allow] 4:rcsv[def:""]
  7. set "s10=$ErrorActionPreference='silentlycontinue'; $rcsv=($recursive -ne ''); $rk=$regkey -split '\\\\',2; $key=$rk[1];"
  8. set "s11=switch -regex ($rk[0]) { '[mM]'{$HK='LocalMachine'};'[uU]'{$HK='CurrentUser'}; default {$HK='ClassesRoot'}; }; $HK; $key;"
  9. set "s12=if($sid -eq ''){$sid='S-1-5-32-544'}; [System.Security.Principal.SecurityIdentifier]$own=$sid;"  
  10. set "s13=$dll0='[DllImport(''ntdll.dll'')]public static extern int RtlAdjustPrivilege(ulong a,bool b,bool c,ref bool d);'; $ntdll="
  11. set "s14=Add-Type -Member $dll0 -Name NtDll -PassThru; foreach($i in @(9,17,18)){$null=$ntdll::RtlAdjustPrivilege($i,1,0,[ref]0)};"
  12. set "s15=function Reg_TakeOwnership { param($hive, $key, $own, $perm='FullControl', $allow='Allow', $rcsv=$false);"
  13. set "s16= $reg=[Microsoft.Win32.Registry]::$hive.OpenSubKey($key,'ReadWriteSubTree','TakeOwnership');$acl=$reg.GetAccessControl();"
  14. set "s17= $acl.SetOwner($own); $acl.SetAccessRuleProtection($false,$false); $reg.SetAccessControl($acl);"
  15. set "s18= $reg=$reg.OpenSubKey('','ReadWriteSubTree','ChangePermissions'); $rule=0,0; $x='Deny',$allow; for($i=0;$i -le 2;$i++){"
  16. set "s19=    $rule[$i]=New-Object System.Security.AccessControl.RegistryAccessRule($own,$perm,'ContainerInherit','None',$x[$i])};"
  17. set "s20= $acl.RemoveAccessRuleSpecific($rule[0]);$acl.ResetAccessRule($rule[1]);$reg.SetAccessControl($acl);$acl|fl;"
  18. set "s21=} Reg_TakeOwnership $HK $key $own $perm $allow $true; if($rcsv){ $r=[Microsoft.Win32.Registry]::$HK.OpenSubKey($key);"
  19. set "s22= foreach($sk in $r.GetSubKeyNames()){$sk; try{ Reg_TakeOwnership $HK $($key+'\\'+$sk) $own $perm $allow }catch{} }}"
  20. setlocal & for /l %%# in (10,1,22) do call set "ps_RegTakeOwnership=%%ps_RegTakeOwnership%%%%s%%#:'="%%"
  21. powershell.exe -c " $regkey='%~1';$sid='%~2';$perm='%~3';$allow='%~4';$recursive='%~5'; %ps_RegTakeOwnership%;"
  22. endlocal & exit/b
复制代码
发表于 2019-7-29 22:12:41 | 显示全部楼层
要看懂后面的内容,你需要先学习一下 PowerShell
 楼主| 发表于 2019-7-29 23:03:46 | 显示全部楼层
本帖最后由 2000lg 于 2019-7-29 23:13 编辑
要看懂后面的内容,你需要先学习一下 PowerShell
Batcher 发表于 2019-7-29 22:12

多谢前辈回复。
请问看懂这一段代码,需要学powershell哪些内容吗。能否给个参考,谢谢。现在一头雾水

或者大神能否翻译成批处理的代码。
发表于 2019-7-30 08:30:45 | 显示全部楼层
回复 3# 2000lg


挑一本你能看进去的学习一下吧
http://bbs.bathome.net/thread-26220-1-1.html
 楼主| 发表于 2019-7-30 23:43:30 | 显示全部楼层
回复 4# Batcher


多谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 06:15 , Processed in 0.082824 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表