Board logo

标题: [系统相关] [已解决]批处理修改组策略或注册表给guest用户限权允许远程关机 [打印本页]

作者: tm234511003    时间: 2009-5-12 11:55     标题: [已解决]批处理修改组策略或注册表给guest用户限权允许远程关机

利用Shutdown远程关机都要给guest用户限权,怎么用批处理或注册表来实现??
图形操作如下:
单击“开始”按钮,选择“运行”,在对话框中输入“gpedit.msc”,然后单击“确定”,即可打开组策略编辑器。
2、在“组策略”窗口的左侧窗格中逐级展开“计算机配置”→“Windows 设置”→“安全设置”→“本地策略”→“用户权利指派”。如图1所示。

3、在“组策略”窗口的右侧窗格中选择“从远端系统强制关机”,通过双击将其打开。如图2所示。

4、在弹出的对话框中显示目前只有“Administrators”组的成员才有权从远程关机;单击对话框下方的“添加用户或组”按钮,然后在新弹出的对话框中输入“guest”,再单击“确定”按扭。
5、这时在“从远端系统强制关机”的属性中便添加了一个“guest”用户,单击“确定”即可。
请点击图片,另存到电脑放大看

[ 本帖最后由 Batcher 于 2009-5-13 11:38 编辑 ]
作者: pusofalse    时间: 2009-5-12 18:44

估计批处理很难做到,都跟踪不到是在注册表中的哪个位置。用api的话简单得很。
作者: tm234511003    时间: 2009-5-12 19:28

用api也可以啊,麻烦楼上的发出来。我邮箱[email]234511003@qq.com[/email]
作者: pusofalse    时间: 2009-5-12 20:37

给你写一个,在本机上测试成功。以下是AutoIt的代码,具体程序在我的网盘里:http://pusofalse.ys168.com/, 目录AutoIt,AddAccountRights.rar
  1. ; ==================== PRIVILEGE =====================
  2. ; SeCreateTokenPrivilege               
  3. ; SeAssignPrimaryTokenPrivilege
  4. ; SeLockMemoryPrivilege
  5. ; SeIncreaseQuotaPrivilege
  6. ; SeUnsolicitedInputPrivilege
  7. ; SeMachineAccountPrivilege
  8. ; SeTcbPrivilege
  9. ; SeSecurityPrivilege
  10. ; SeTakeOwnershipPrivilege
  11. ; SeLoadDriverPrivilege
  12. ; SeSystemProfilePrivilege
  13. ; SeSystemtimePrivilege
  14. ; SeProfileSingleProcessPrivilege
  15. ; SeIncreaseBasePriorityPrivilege
  16. ; SeCreatePagefilePrivilege
  17. ; SeCreatePermanentPrivilege
  18. ; SeBackupPrivilege
  19. ; SeRestorePrivilege
  20. ; SeShutdownPrivilege
  21. ; SeDebugPrivilege
  22. ; SeAuditPrivilege
  23. ; SeSystemEnvironmentPrivilege
  24. ; SeChangeNotifyPrivilege
  25. ; SeRemoteShutdownPrivilege
  26. ; ============================================================
  27. ; ================ ACCOUNT RIGHT =================
  28. ; SeBatchLogonRight
  29. ; SeDenyBatchLogonRight
  30. ; SeDenyInteractiveLogonRight
  31. ; SeDenyNetworkLogonRight
  32. ; SeDenyRemoteInteractiveLogonRight
  33. ; SeDenyServiceLogonRight
  34. ; SeInteractiveLogonRight
  35. ; SeNetworkLogonRight
  36. ; SeRemoteInteractiveLogonRight
  37. ; SeServiceLogonRight
  38. ; ============================================================
  39. CONST $ERROR_INVALID_SID = 1337
  40. $iResult = _LsaAddAccountRights("guest", "SeRemoteShutdownPrivilege")
  41. If $iResult = False Then
  42.         Msgbox(48, "", "Failed, ErrorCode: " & @error)
  43. Else
  44.         Msgbox(64, "", "Succeed, ErrorCode: " & @error)
  45. EndIf
  46. Func _LsaAddAccountRights($sName, $sRight)
  47.         Local $hPolicy, $tSid, $pSid, $iLength, $iSysError
  48.         Local $tUnicode, $pUnicode, $iResult, $tRight, $pRight
  49.         $tSid = _LookupAccountName($sName)
  50.         $pSid = DllStructGetPtr($tSid)
  51.         If Not _IsValidSid($pSid) Then Return SetError(@error, 0, 0)
  52.         $hPolicy = _LsaOpenPolicy(0x811)
  53.         $iLength = StringLen($sRight) * 2
  54.         $tRight = DllStructCreate("wchar[" & $iLength & "]")
  55.         $pRight = DllStructGetPtr($tRight)
  56.         DllStructSetData($tRight, 1, $sRight)
  57.         $tUnicode = DllStructCreate("ushort Length;ushort MemSize;ptr wBuffer")
  58.         $pUnicode = DllStructGetPtr($tUnicode)
  59.         DllStructSetData($tUnicode, "Length", $iLength)
  60.         DllStructSetData($tUnicode, "MemSize", $iLength + 2)
  61.         DllStructSetData($tUnicode, "wBuffer", $pRight)
  62.         $iResult = DllCall("advapi32.dll", "dword", "LsaAddAccountRights", _
  63.                         "hWnd", $hPolicy, "ptr", $pSid, _
  64.                         "ptr", $pUnicode, "ulong", 1)
  65.         $tSid = 0
  66.         _LsaClose($hPolicy)
  67.         $iSysError = _LsaNtStatusToWinError($iResult[0])
  68.         Return SetError($iSysError, 0, $iSysError = 0)
  69. EndFunc        ;==>_LsaAddAccountRights()
  70. Func _LsaOpenPolicy($iAccess)
  71.         Local $hPolicy, $tLsaAttr, $pLsaAttr
  72.         $tLsaAttr = DllStructCreate("ulong;hWnd;ptr;ulong;ptr[2]")
  73.         $pLsaAttr = DllStructGetPtr($tLsaAttr)
  74.         $hPolicy = DllCall("advapi32.dll", "ulong", "LsaOpenPolicy", _
  75.                         "ptr", 0, "ptr", $pLsaAttr, "int", $iAccess, "hWnd*", 0)
  76.         Return SetError(_LsaNtStatusToWinError($hPolicy[0]), 0, $hPolicy[4])
  77. EndFunc        ;==>_LsaOpenPolicy()
  78. Func _LsaClose($hPolicy)
  79.         Local $iResult
  80.         $iResult = DllCall("advapi32.dll", "ulong", "LsaClose", "hWnd", $hPolicy)
  81.         Return SetError(_LsaNtStatusToWinError($iResult[0]), 0, $iResult[0] = 0)
  82. EndFunc        ;==>_LsaClose()
  83. Func _LsaNtStatusToWinError($iStatusCode)
  84.         Local $iResult
  85.         $iResult = DllCall("advapi32.dll", "ulong", "LsaNtStatusToWinError", "dword", $iStatusCode)
  86.         Return $iResult[0]
  87. EndFunc        ;==>_LsaNtStatusToWinError()
  88. Func _LookupAccountName($sName, $sSystem = "")
  89.         Local $iResult, $tSid, $pSid, $tDomain, $pDomain
  90.         $iResult = DllCall("advapi32.dll", "int", "LookupAccountName", _
  91.                         "str", $sSystem, "str", $sName, _
  92.                         "ptr", 0, "int*", 0, "ptr", 0, "int*", 0, "int*", 0)
  93.         If $iResult[4] = 0 Then Return SetError($ERROR_INVALID_SID, 0, 0)
  94.         $tSid = DllStructCreate("ubyte[" & $iResult[4] & "]")
  95.         $tDomain = DllStructCreate("ubyte[" & $iResult[6] & "]")
  96.         $pSid = DllStructGetPtr($tSid)
  97.         $pDomain = DllStructGetPtr($tDomain)
  98.         $iResult = DllCall("advapi32.dll", "int", "LookupAccountName", _
  99.                         "str", $sSystem ,"str", $sName, _
  100.                         "ptr", $pSid, "int*", $iResult[4], _
  101.                         "ptr", $pDomain, "int*", $iResult[6], "int*", 0)
  102.         Return SetError(Not $iResult[0], $iResult[7], $tSid)
  103. EndFunc        ;==>_LookupAccountName()
  104. Func _IsValidSid($pSid)
  105.         Local $iResult
  106.         $iResult = DllCall("advapi32.dll", "int", "IsValidSid", "ptr", $pSid)
  107.         If $iResult[0] Then Return SetError(0, 0, True)
  108.         Return SetError($ERROR_INVALID_SID, 0, 0)
  109. EndFunc        ;==>_IsValidSid()
复制代码

[ 本帖最后由 pusofalse 于 2009-5-13 00:54 编辑 ]
作者: tm234511003    时间: 2009-5-13 09:19

谢谢pusofalse 版主,问题解决了。
作者: lidongyu1984    时间: 2009-10-25 16:54

请问为什么我运行的时候出现succeed,errorcode:0
作者: lxzzr    时间: 2009-10-28 16:31     标题: 回复 1楼 的帖子

这样就好了:
  1. @echo off
  2. (echo [Unicode]
  3. echo Unicode=yes
  4. echo [Version]
  5. echo signature="$CHICAGO$"
  6. echo Revision=1
  7. echo [Privilege Rights]
  8. echo seremoteshutdownprivilege = Guest,Administrators)>>sec.inf
  9. secedit /configure /db sec.sdb /cfg sec.inf /log sec.log /quiet
  10. del sec.*
  11. echo 修改成功.
  12. pause>nul
复制代码

作者: amw668    时间: 2010-6-12 13:17     标题: 刚要找这东西

刚要找这东西,就找到了,七楼不错哦
作者: FIFM007    时间: 2013-9-22 22:29

回复 7# lxzzr


    太棒了!七楼太高了!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2