我嘗試訪問遠程計算機上的虛擬磁盤服務(VDS)。解決了一些與缺少Windows防火牆規則相關的問題(RPC不可用)之後,我在查詢服務時遇到了UnauthorizedAccessException(E_ACCESSDENIED)問題。訪問遠程計算機上的虛擬磁盤服務 - UnauthorizedAccessException
這是我的代碼:
// Create the service loader
VdsServiceLoader loaderClass = new VdsServiceLoader();
IVdsServiceLoader loader = (IVdsServiceLoader)loaderClass;
Console.WriteLine("Got Loader");
// Load the vds service
try
{
loader.LoadService(<Hostname>, out service);
}
catch (UnauthorizedAccessException)
{
// E_ACCESSDENIED
Console.WriteLine("Need admin rights");
return;
}
如果我訪問本地服務的時候我沒有用管理員權限執行此拋出異常。如果我優先處理管理員權限,一切都很好,我可以毫無問題地獲得本地VDS信息。
我想我要指定一個用戶名/密碼的地方訪問服務,但我不知道在哪裏。或者授予遠程機器上此服務的訪問權限。
我也嘗試了建議ImpersonateUser這樣
if (ImpersonationAPI.LogonUser(pUsername, pDomain, pPassword, LogonType.LOGON32_LOGON_NEW_CREDENTIALS, LogonProvider.LOGON32_PROVIDER_WINNT50, ref token) != 0)
{
if (ImpersonationAPI.DuplicateToken(token, SecurityImpersonationLevel.SecurityImpersonation, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
LoadUserProfile(tokenDuplicate, pUsername);
m_ImpersonationContext = tempWindowsIdentity.Impersonate();
...
}
}
我也試過標誌LOGON32_LOGON_INTERACTIVE,LOGON32_LOGON_NETWORK,LOGON32_LOGON_NETWORK_CLEARTEXT和LOGON32_LOGON_SERVICE。
運行Windows 7,這兩款機器
謝謝!
謝謝,我會試一試 – torno 2012-04-23 07:20:47
我發現這個:初始化DCOM安全性和模擬... <是不同的>原因是DCOM 安全性由CLR(通過調用CoInitializeSecurity)來初始化以使用默認情況下,流程憑證爲 。所以它失敗的原因是因爲 調用COM/DCOM時使用默認的進程安全區域,如果你想要爲進程應用不同的安全裝置,你將必須在過程的早期調用CoInitializeSecurity (至少在您的 首次調用COM/DCOM之前)。 – torno 2012-04-23 09:49:18
我再次嘗試了您的建議,因爲該應用現在作爲nt-authority \ system-account下的服務運行。我冒充了「新憑據」標誌(還使用其他標誌作爲測試)以及管理員用戶的指定憑證。嘗試連接到服務時,我仍然收到E_ACCESSDENIED – torno 2012-07-23 13:51:32