Windows Vista和7在网络和共享中心中具有此开关。它默认处于启用状态,即使它们与Everyone共享(如Public文件夹),也会阻止对共享进行未经身份验证的访问。我需要教我的应用程序自动打开和关闭它。怎么样? 我怀疑注册表中有一个值对此负责,但我不知道如何找到它。
答案 0 :(得分:3)
可能太晚了:),但希望对其他人有用。
以下步骤对我来说效果很好(它也适用于W8消费者预览版)。
将其关闭:
1 - 运行
启用访客帐户net user guest / active:yes
2 - 通过运行
来获取访客用户SIDwmic useraccount其中name ='guest'获取sid
3 - 获取对注册表文件夹HKLM \ SECURITY
的写入权限4 - 将以下密钥修改为:
,其中$ SID是第2点中获得的sid[HKEY_LOCAL_MACHINE \ SECURITY \策略\帐户\ $ SID \ ActSysAc]
@ =十六进制(0):41,00,00,00
5 - 重启机器(直到现在,我没有找到更好的方法使更改生效)
再次打开它:
[HKEY_LOCAL_MACHINE \ SECURITY \策略\帐户\ $ SID \ ActSysAc]
@ =十六进制(0):c1,00,00,00
然后重启
答案 1 :(得分:1)
将完整的寄存器导出为1.reg,打开共享(或关闭,如果已打开),导出到2.reg并检查差异?
为了能够使用diff
实用程序,请导出Win9X/NT4 registration files (*.reg)
-format
答案 2 :(得分:1)
这是一个实现paolos答案的powershell脚本。它是未经修改的,因为它允许每个人写入对特定注册表项的访问权限([7]部分使用regini语法指定它)并使用C:\ root中的文件但是完美无缺:
# Get guest user id
$SID = & "wmic" "useraccount" "where" "name='guest'" "get" "sid" "/Value" | Out-String
$SID = $SID.Trim().Substring(4)
# Generate regini script
$PATH = "\Registry\Machine\Security\Policy\Accounts\" + $SID + "\ActSysAc"
$PATH + " [7]`r`n" + $PATH + "`r`n@ = REG_NONE 4 0x41 0x00 0x00 0x00" >> "C:\firstrun.regini"
# Execute regini script
& "regini" "C:\firstrun.regini"
答案 3 :(得分:0)
它在注册表中不一定在您期望的位置(它在SAM中)。据我所知,所有设置都启用或禁用来宾帐户,因此,只需启用或禁用该帐户。
你没有说你正在使用的编程语言是什么,所以这里有一些简单的C代码来启用一个帐户,如果你需要其他任何东西,我相信通过谷歌有很多。
#include <LM.h>
#pragma comment(lib, "Netapi32.lib")
BOOL EnableUser(LPCWSTR lpUserName, BOOL bEnable)
{
BOOL bRet = FALSE;
DWORD dwLevel = 1008;
LPUSER_INFO_1 ui1;
USER_INFO_1008 ui1008;
NET_API_STATUS nStatus;
nStatus = NetUserGetInfo(NULL, lpUserName, 1, (LPBYTE*)&ui1);
if(nStatus == NERR_Success)
{
ui1008.usri1008_flags = ui1->usri1_flags;
if(bEnable)
{
ui1008.usri1008_flags &= ~UF_ACCOUNTDISABLE;
}
else
{
ui1008.usri1008_flags |= UF_ACCOUNTDISABLE;
}
nStatus = NetUserSetInfo(NULL, lpUserName, dwLevel, (LPBYTE)&ui1008, NULL);
NetApiBufferFree(ui1);
if(nStatus == NERR_Success)
{
bRet = TRUE;
}
}
return bRet;
}
答案 4 :(得分:0)
看看这个文件(disable_password_protected_sharing.bat)
@echo off
echo 12- get sid gust variable
for /f "delims= " %%a in ('"wmic useraccount where name='guest' get sid"') do (
if not "%%a"=="SID" (
set sid_guest=%%a
goto :loop_end
)
)
:loop_end
echo 13- create script for regini
@echo \Registry\Machine\SECURITY [1 5 7 11 17 21]> x
@echo \Registry\Machine\SECURITY\policy [1 5 7 11 17 21]>> x
@echo \Registry\Machine\SECURITY\policy\accounts [1 5 7 11 17 21]>> x
@echo \Registry\Machine\SECURITY\policy\accounts\%sid_guest% [1 5 7 11 17 21]>> x
@echo \Registry\Machine\SECURITY\policy\accounts\%sid_guest%\ActSysAc [1 5 7 11 17 21]>> x
echo 14- add permission for machine/security
net user guest /active:yes
regini x
del x
@echo Windows Registry Editor Version 5.00 > y.reg
@echo [HKEY_LOCAL_MACHINE\SECURITY\Policy\Accounts\%sid_guest%\ActSysAc] >> y.reg
@echo @=hex(0):41,00,00,00 >> y.reg
reg import y.reg
del y.reg
echo Windows will now reboot.
Pause
shutdown -r
它在windows7中工作正常
答案 5 :(得分:0)
我在Windows 7 Home上测试了Paolo的答案但没有成功。
在关闭密码保护共享之前和之后比较注册表的.reg
提取,我注意到了3个值的修改:
[HKEY_LOCAL_MACHINE\SECURITY\Policy\Accounts\S-1-5-21-3207962671-1026919178-1165869658-501\ActSysAc] REG_NONE
值的第一个字节从c1
更改为41
(此SID是来宾帐户的SID)
[HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account] REG_BINARY "F"
值的第17个字节从3b
更改为3c
[HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account\Users\000001F5] REG_BINARY "F"
值的第57个字节从15
更改为14
(0x1F5
是来宾姓名值的类型)
我尝试仅更改Paolo指示的第一个值。即使重启后,这也没有改变密码保护共享。
但是,在14
和15
之间仅为第三个值更改第57个字节时,我取得了成功:
[HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account\Users\000001F5] REG_BINARY "F".
我在另一台Windows 7计算机上测试成功。