2009-11-05 202 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字節,當我取得過成功。

相關問題