2009-11-05 189 views
4

的Windows Vista和Windows 7在网络和共享中心此开关。它默认情况下处于启用状态,即使它们与Everyone共享(如公用文件夹),也可以防止未经身份验证的共享访问。我需要教我的应用程序打开和关闭自动。怎么样? 我怀疑在注册表中有一个值对此负责,但我不知道如何找到它。如何以编程方式打开或关闭密码保护共享?

+0

是否要在Win7上的“控制面板\所有控制面板项目\网络和共享中心\高级共享设置”中启用“共享,以便网络访问的每个人都可以读写公共文件夹中的文件”? – nick 2010-01-14 01:26:54

+0

不可以。我想启用/禁用密码保护共享。这是从底部开始的第二个设置。 – CannibalSmith 2010-01-14 12:10:47

回答

1

出口完整的寄存器作为1.reg,转分享(或关闭,如果它是打开的),出口2.reg和检查有何区别?

为了能够使用diff实用,在Win9X/NT4 registration files (*.reg)导出文件-format

+0

这些文件只显示HKEY_USERS中MuiCache和MRUListEx(无论那些)的变化。请注意,我正在查找的交换机是系统范围的,应该位于HKEY_LOCAL_MACHINE中。 – CannibalSmith 2010-01-13 14:15:54

+0

好吧,显然它不在reg :( – Kimvais 2010-01-13 16:02:24

+0

@CannibalSmith:MRUListEx是针对“最近使用过的(MRU)”项目,因此它们会在包含您最近使用过的东西的列表中显示更高。 – 2010-01-19 14:26:15

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; 
} 
+1

您的代码既不会禁用密码保护共享,也不会启用来宾帐户,我会逐步确保所有API调用返回0.此外,通过控制面板手动启用来宾帐户不会影响密码保护共享。 – CannibalSmith 2010-01-18 08:41:31

3

可能为时已晚:),但对于其他人希望有用。

以下步骤工作就好,我(它的工作对W8消费者预览太)。

将其关闭:

1 - 通过运行

净用户客体/活性启用访客帐户:是

2 - 通过运行获取访客用户SID,例如,

wmic useraccount where name ='guest'get 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

然后重新启动

0

这里是一个PowerShell脚本实现paolos回答。这是糙米,因为它允许每个人写访问特定的注册表键([7]部分指定此与REGINI语法),并使用在C文件:\根,但工作完美无瑕:

# 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`[email protected] = REG_NONE 4 0x41 0x00 0x00 0x00" >> "C:\firstrun.regini" 

# Execute regini script 
& "regini" "C:\firstrun.regini" 
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):42,00,00,00 >> y.reg 
reg import y.reg 
del y.reg 

shutdown -r 

它工作在Windows7

0

我测试了保罗的在Windows 7回答首页没有成功的罚款。 前比较.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改为从15变更为140x1F53c

[HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account\Users\000001F5] REG_BINARY "F"值的57字节是T客人的姓名值的YPE)

我试图改变只有第一个值由Paolo所示。即使重启后,这也没有改变密码保护共享。

[HKEY_LOCAL_MACHINE\SECURITY\SAM\Domains\Account\Users\000001F5] REG_BINARY "F". 

我成功的另一个Windows 7的电脑进行测试: 但是,只有第三值1415之间切换时,57字节,当我取得过成功。

相关问题