我尝试访问远程计算机上的虚拟磁盘服务(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