2012-05-16 42 views
2

我正在寫一些代碼來執行遠程計算機上的wmi查詢和方法執行。我的登錄憑據是域管理員。當我在應用程序模式下運行時,每個工作正常。當我作爲服務運行時,由於默認帳戶服務使用isLocal System,因此它不會工作。當我將服務設置爲我的憑證運行時,遠程wmi也正常工作。作爲服務運行時連接到遠程機器的WMI

然而,這是不可取的,所以我試圖通過在IWbemLocator.ConnectServer上提供用戶名和密碼來連接到遠程wmi服務。我能夠成功取回IWbemServices對象。然而,當我試圖獲取類對象從IwbemServices下面對象,我得到了錯誤:

//IWbemServices *pSvc 
const bstr_t objectPath("stdRegProv"); 
const bstr_t methodName("GetStringValue"); 
IWbemClassObject *pClass = NULL; 
HRESULT hr = pSvc->GetObject(objectPath, 0, NULL, &pClass, NULL); 

返回HR是0x80041003這是從這個鏈接「訪問被拒絕」:http://msdn.microsoft.com/en-us/library/windows/desktop/aa394559%28v=vs.85%29.aspx

通常,如果我提供了錯誤的用戶名和密碼,我將在IWbemLocator.ConnectServer上獲取拒絕訪問。所以我在這裏有點困惑,爲什麼連接是好的,但我無法獲得IWbemClassObject對象。由於它在使用我的域名憑證作爲服務帳戶時正在工作,因此必須存在一些安全性差異。我的WMI連接代碼基於MSDN上的此示例代碼:http://msdn.microsoft.com/en-us/library/windows/desktop/aa390418%28v=vs.85%29.aspx

+0

我在微軟論壇上打開了另一篇文章:[MS Forum](http://social.msdn.microsoft.com/Forums/en-US/vclanguage/thread/4161d6a1-1b52-4aa9-98b9-eacad5ba2a90/)在這個問題上它更深入。但它仍然沒有解決。 – windfly2006

+0

您是否使用IWbemLocator.ConnectServer從遠程服務器連接到第三個主機? – Lizz

回答

1

WMI類型剝離一些安全權限;您需要將您的帳戶設置爲「受信任的委派」,這是非常強大且不推薦的或簽署代碼。或者,您可以將明確的權限傳遞給進程。

+0

您確定他們需要提供代表團priv而不僅僅是模仿嗎?不是100%肯定的,但是這就是我所遇到的。 –

+0

我通常會同意你,凱文,但他引用的代碼使用模擬。如果用戶沒有完全或正確地實現它,那麼使用模擬更新他的代碼將是一個好主意。 :) – Lizz

+0

在這裏投票給你的幫助。然而在這一點上,我沒有一個env來證實這一點。基本上我們沒有去遠程wmi路線。 – windfly2006