2011-12-08 137 views
2

我嘗試使用下面的代碼來控制遠程計算機上的服務:遠程OpenSCManager失敗

// Error checking omitted for brevity 
HANDLE hToken = NULL; 
// user = username with no domain specification 
// domain = targetmachine when targetting computer outside of domain 
LogonUser(user, domain, password, 
    LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &hToken); 

ImpersonateLoggedOnUser(hToken); 

SC_HANDLE hSc = OpenSCManager(targetmachine, 
        SERVICES_ACTIVE_DATABASE, SC_MANAGER_ALL_ACCESS); 

從計算機本地域中運行,並在靶向機器時也能正常工作同一個域,在使用當前登錄用戶的憑證以及使用其他憑證時都是如此。

但是,當我試圖鎖定不在任何域的計算機時,如果我指定除SC_MANAGER_CONNECT之外的其他任何內容作爲所需的訪問權限,則OpenSCManager調用將失敗,並且訪問被拒絕。從位於域外的計算機運行域計算機(使用用戶/域/密碼組合作爲目標計算機上本地管理員的域用戶)。從域外的計算機定位域外的計算機不起作用。

用戶/密碼是針對目標計算機上管理員組的成員,因此帳戶權限不應該存在問題。

我已經使用sc -sdshow scmanager檢查了scmanager安全描述符,它對於域計算機和非域計算機是相同的。兩者都運行Windows 7 64位。

我也測試過使用psexec,它具有相同的症狀,即在域計算機之間正常工作,但在定位非域計算機時無法正常工作。

我也測試過在目標機器上禁用TCP over TCP並重新啓動它,因爲這是described as a possible cause for access denied errors,但這似乎沒有幫助。我也測試過在目標機器上禁用Windows防火牆,但是沒有改變。

是否需要啓用某些設置才能使服務的遠程配置正常工作?

+0

您可能會在serverfault.com獲得更好的回覆 –

+0

@HansPassant:您可能是對的。我有點希望我會在代碼中做錯某些事情,這很可能會在這裏被某個人發現。 – villintehaspam

回答

6

看來這是由Windows Vista及更高版本的新安全功能引起的。默認情況下,Windows不會授予遠程連接用戶完全管理員權限,除非在域內完成。所以爲了這個工作,User Account Control Remote Restrictions需要關閉,但當然這也會降低您的計算機的安全性。

感謝Hans Passant建議檢查similar issues posted on serverfault.com

+0

+1感謝您的提示! – fmuecke

+0

關鍵字:'無法打開SC管理器錯誤:5消息:訪問被拒絕 –