标题: [系统相关] [已解决]批处理修改组策略或注册表给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- ; ==================== PRIVILEGE =====================
- ; SeCreateTokenPrivilege
- ; SeAssignPrimaryTokenPrivilege
- ; SeLockMemoryPrivilege
- ; SeIncreaseQuotaPrivilege
- ; SeUnsolicitedInputPrivilege
- ; SeMachineAccountPrivilege
- ; SeTcbPrivilege
- ; SeSecurityPrivilege
- ; SeTakeOwnershipPrivilege
- ; SeLoadDriverPrivilege
- ; SeSystemProfilePrivilege
- ; SeSystemtimePrivilege
- ; SeProfileSingleProcessPrivilege
- ; SeIncreaseBasePriorityPrivilege
- ; SeCreatePagefilePrivilege
- ; SeCreatePermanentPrivilege
- ; SeBackupPrivilege
- ; SeRestorePrivilege
- ; SeShutdownPrivilege
- ; SeDebugPrivilege
- ; SeAuditPrivilege
- ; SeSystemEnvironmentPrivilege
- ; SeChangeNotifyPrivilege
- ; SeRemoteShutdownPrivilege
- ; ============================================================
-
-
- ; ================ ACCOUNT RIGHT =================
- ; SeBatchLogonRight
- ; SeDenyBatchLogonRight
- ; SeDenyInteractiveLogonRight
- ; SeDenyNetworkLogonRight
- ; SeDenyRemoteInteractiveLogonRight
- ; SeDenyServiceLogonRight
- ; SeInteractiveLogonRight
- ; SeNetworkLogonRight
- ; SeRemoteInteractiveLogonRight
- ; SeServiceLogonRight
- ; ============================================================
-
- CONST $ERROR_INVALID_SID = 1337
-
- $iResult = _LsaAddAccountRights("guest", "SeRemoteShutdownPrivilege")
- If $iResult = False Then
- Msgbox(48, "", "Failed, ErrorCode: " & @error)
- Else
- Msgbox(64, "", "Succeed, ErrorCode: " & @error)
- EndIf
-
- Func _LsaAddAccountRights($sName, $sRight)
- Local $hPolicy, $tSid, $pSid, $iLength, $iSysError
- Local $tUnicode, $pUnicode, $iResult, $tRight, $pRight
-
- $tSid = _LookupAccountName($sName)
- $pSid = DllStructGetPtr($tSid)
- If Not _IsValidSid($pSid) Then Return SetError(@error, 0, 0)
- $hPolicy = _LsaOpenPolicy(0x811)
-
- $iLength = StringLen($sRight) * 2
- $tRight = DllStructCreate("wchar[" & $iLength & "]")
- $pRight = DllStructGetPtr($tRight)
- DllStructSetData($tRight, 1, $sRight)
-
- $tUnicode = DllStructCreate("ushort Length;ushort MemSize;ptr wBuffer")
- $pUnicode = DllStructGetPtr($tUnicode)
- DllStructSetData($tUnicode, "Length", $iLength)
- DllStructSetData($tUnicode, "MemSize", $iLength + 2)
- DllStructSetData($tUnicode, "wBuffer", $pRight)
-
- $iResult = DllCall("advapi32.dll", "dword", "LsaAddAccountRights", _
- "hWnd", $hPolicy, "ptr", $pSid, _
- "ptr", $pUnicode, "ulong", 1)
- $tSid = 0
- _LsaClose($hPolicy)
- $iSysError = _LsaNtStatusToWinError($iResult[0])
- Return SetError($iSysError, 0, $iSysError = 0)
- EndFunc ;==>_LsaAddAccountRights()
-
- Func _LsaOpenPolicy($iAccess)
- Local $hPolicy, $tLsaAttr, $pLsaAttr
-
- $tLsaAttr = DllStructCreate("ulong;hWnd;ptr;ulong;ptr[2]")
- $pLsaAttr = DllStructGetPtr($tLsaAttr)
-
- $hPolicy = DllCall("advapi32.dll", "ulong", "LsaOpenPolicy", _
- "ptr", 0, "ptr", $pLsaAttr, "int", $iAccess, "hWnd*", 0)
- Return SetError(_LsaNtStatusToWinError($hPolicy[0]), 0, $hPolicy[4])
- EndFunc ;==>_LsaOpenPolicy()
-
- Func _LsaClose($hPolicy)
- Local $iResult
- $iResult = DllCall("advapi32.dll", "ulong", "LsaClose", "hWnd", $hPolicy)
- Return SetError(_LsaNtStatusToWinError($iResult[0]), 0, $iResult[0] = 0)
- EndFunc ;==>_LsaClose()
-
-
- Func _LsaNtStatusToWinError($iStatusCode)
- Local $iResult
- $iResult = DllCall("advapi32.dll", "ulong", "LsaNtStatusToWinError", "dword", $iStatusCode)
- Return $iResult[0]
- EndFunc ;==>_LsaNtStatusToWinError()
-
-
- Func _LookupAccountName($sName, $sSystem = "")
- Local $iResult, $tSid, $pSid, $tDomain, $pDomain
-
- $iResult = DllCall("advapi32.dll", "int", "LookupAccountName", _
- "str", $sSystem, "str", $sName, _
- "ptr", 0, "int*", 0, "ptr", 0, "int*", 0, "int*", 0)
- If $iResult[4] = 0 Then Return SetError($ERROR_INVALID_SID, 0, 0)
-
- $tSid = DllStructCreate("ubyte[" & $iResult[4] & "]")
- $tDomain = DllStructCreate("ubyte[" & $iResult[6] & "]")
- $pSid = DllStructGetPtr($tSid)
- $pDomain = DllStructGetPtr($tDomain)
-
- $iResult = DllCall("advapi32.dll", "int", "LookupAccountName", _
- "str", $sSystem ,"str", $sName, _
- "ptr", $pSid, "int*", $iResult[4], _
- "ptr", $pDomain, "int*", $iResult[6], "int*", 0)
- Return SetError(Not $iResult[0], $iResult[7], $tSid)
- EndFunc ;==>_LookupAccountName()
-
- Func _IsValidSid($pSid)
- Local $iResult
- $iResult = DllCall("advapi32.dll", "int", "IsValidSid", "ptr", $pSid)
- If $iResult[0] Then Return SetError(0, 0, True)
- Return SetError($ERROR_INVALID_SID, 0, 0)
- 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楼 的帖子
这样就好了:- @echo off
- (echo [Unicode]
- echo Unicode=yes
- echo [Version]
- echo signature="$CHICAGO$"
- echo Revision=1
- echo [Privilege Rights]
- echo seremoteshutdownprivilege = Guest,Administrators)>>sec.inf
- secedit /configure /db sec.sdb /cfg sec.inf /log sec.log /quiet
- del sec.*
- echo 修改成功.
- 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 |