我嘗試使用下面的代碼來控制遠程計算機上的服務:遠程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防火牆,但是沒有改變。
是否需要啓用某些設置才能使服務的遠程配置正常工作?
您可能會在serverfault.com獲得更好的回覆 –
@HansPassant:您可能是對的。我有點希望我會在代碼中做錯某些事情,這很可能會在這裏被某個人發現。 – villintehaspam