2012-04-20 28 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情報が得られます。

私はサービスにアクセスするためのどこかのユーザー名/パスワードを指定するべきだと思っていますが、私はどこにいるのかわかりません。または、リモートマシン上のこのサービスにアクセス権を与えます。

また、私はまた旗LOGON32_LOGON_INTERACTIVE、LOGON32_LOGON_NETWORK、LOGON32_LOGON_NETWORK_CLEARTEXTとLOGON32_LOGON_SERVICEを試​​してみました。この

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(); 
     ... 
    } 
} 

よう提案ImpersonateUserとを試してみました。勝つ7を実行して

両方のマシン

ありがとう!

答えて

0

リモートマシンにログオンし、適切な権限を持つユーザーになりすます必要があります。そのためには、LogonUserLOGON32_LOGON_NEW_CREDENTIALSログオンタイプを使用し、結果のトークンでWindows IDを構成し、それを偽装します。例えば、この質問Get impersonated user nameのサンプルです。

+0

ありがとう、私はそれを試してみよう – torno

+0

私はこれを発見しました:DCOMセキュリティを初期化し、偽装する... <違う>これはDCOM セキュリティが(CoInitializeSecurityを呼び出すことによって)CLRによって初期化される デフォルトでプロセス資格情報です。したがって、失敗する理由は、 COM/DCOMを呼び出すときにデフォルトのプロセスセキュリティブランケットが使用されているためです。 プロセスに異なるセキュリティ設定を適用しない場合は、 プロセスの初期段階でCoInitializeSecurityを呼び出す必要があります。 (少なくとも COM/DCOMへの最初の呼び出しの前に)。 – torno

+0

これは、nt-authority \ system-accountの下でサービスとして実行されるため、私は再びあなたの提案を試みました。私は、 "新しい資格"フラグ(テストとして他のフラグを使用する)と管理者の指定された資格情報で偽装しました。私はまだサービスに接続しようとするとE_ACCESSDENIEDを取得する – torno

関連する問題