リモートマシン上の仮想ディスクサービス(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を実行して
両方のマシン
ありがとう!
ありがとう、私はそれを試してみよう – torno
私はこれを発見しました:DCOMセキュリティを初期化し、偽装する... <違う>これはDCOM セキュリティが(CoInitializeSecurityを呼び出すことによって)CLRによって初期化される デフォルトでプロセス資格情報です。したがって、失敗する理由は、 COM/DCOMを呼び出すときにデフォルトのプロセスセキュリティブランケットが使用されているためです。 プロセスに異なるセキュリティ設定を適用しない場合は、 プロセスの初期段階でCoInitializeSecurityを呼び出す必要があります。 (少なくとも COM/DCOMへの最初の呼び出しの前に)。 – torno
これは、nt-authority \ system-accountの下でサービスとして実行されるため、私は再びあなたの提案を試みました。私は、 "新しい資格"フラグ(テストとして他のフラグを使用する)と管理者の指定された資格情報で偽装しました。私はまだサービスに接続しようとするとE_ACCESSDENIEDを取得する – torno