0

リモート マシンの仮想ディスク サービス (VDS) にアクセスしようとしています。Windows ファイアウォール ルールの欠落 (RPC が利用できない) に関連するいくつかの問題を解決した後、サービスをクエリすると UnauthorizedAccessException (E_ACCESSDENIED) が発生します。

これは私のコードです:

        // 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 も試しました。

どちらのマシンも Win 7 を実行しています。

ありがとう!

4

1 に答える 1

0

リモート マシンにログオンし、そこで適切な権限を持つユーザーになりすます必要があります。このためには、ログオン タイプを使用LogonUserLOGON32_LOGON_NEW_CREDENTIALS、結果のトークンを使用して Windows ID を構築し、それを偽装します。たとえば、サンプルの偽装ユーザー名を取得するという質問を参照してください。

于 2012-04-23T06:57:11.317 に答える