2012-04-20 134 views
0

我嘗試訪問遠程計算機上的虛擬磁盤服務(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,這兩款機器

謝謝!

回答

0

您需要登錄到遠程計算機並在那裏模擬具有適當權限的用戶。爲此,請使用LogonUserLOGON32_LOGON_NEW_CREDENTIALS登錄類型,使用生成的令牌構建Windows身份並假冒它。見例如這個問題Get impersonated user name的樣本。

+0

謝謝,我會試一試 – torno 2012-04-23 07:20:47

+0

我發現這個:初始化DCOM安全性和模擬... <是不同的>原因是DCOM 安全性由CLR(通過調用CoInitializeSecurity)來初始化以使用默認情況下,流程憑證爲 。所以它失敗的原因是因爲 調用COM/DCOM時使用默認的進程安全區域,如果你想要爲進程應用不同的安全裝置,你將必須在過程的早期調用CoInitializeSecurity (至少在您的 首次調用COM/DCOM之前)。 – torno 2012-04-23 09:49:18

+0

我再次嘗試了您的建議,因爲該應用現在作爲nt-authority \ system-account下的服務運行。我冒充了「新憑據」標誌(還使用其他標誌作爲測試)以及管理員用戶的指定憑證。嘗試連接到服務時,我仍然收到E_ACCESSDENIED – torno 2012-07-23 13:51:32

相關問題